module transform (clk, rst, sp, Ds, Dp); inout Ds; inout [7:0] Dp; input clk, rst, sp; reg Dst,sign; reg [7:0] Dpt; reg [3:0] counter1, counter2; assign Ds=sp?1'bz st; assign Dp=!sp?8'bz pt; always @ (posedge clk or negedge rst) if(!rst) //寄存器初始化 begin Dpt<=0; Dst<=0; sign<=1; counter1<=0; counter2<=0; end else if(sp&&(counter1<=7))//串转并 begin Dpt[0]<=Ds; //将串型输入赋给临时并型寄存器的最低位 Dpt[7:1]<=Dpt[6:0]; //临时并型寄存器的低7位向左移一位。 counter1<=counter1+1; end else if(!sp&&sign) //先于转换,将并型输入信号暂存到dpt中,并将sign赋0,以防反复向dpt赋值。 begin Dpt<=Dp; sign<=0; end else if(!sp&&(counter2<=7))//并转串 begin Dpt[7:1]<=Dpt[6:0]; //临时并型寄存器的低7位向左移一位。 Dst<=Dpt[7]; //把最高位赋给输出。 counter2<=counter2+1; end endmodule |