关于verilog实现的串并转换功能

关于verilog实现的串并转换功能,第1张

串并转换很简单,就是移位寄存器,后面最好跟一个锁存器,实现你所要求的凯简简功能需要四位移位寄存器和四位锁存器,锁存器的作用就是保持并行数据在移位时不发生变化:

module shift(nreset,clk,en,in,out)

input nreset,clk,en,in

output [3:0] out

reg [1:0] count//移位计数,控制并行数据更新,这里是4bit并行数据

reg [3:0] data

reg [3:0] out

/* 移位计数,用于并行数据输出,也可以外加一个脉冲控制数据边界,这里移位4bit就并行输出一次*/盯裤

always@(posedge clk or negedge nreset)

begin

if(~nreset)

count <= 2'b00

else if(en)

count <= count + 2'b01

end

//移位

always@(posedge clk or negedge nreset)

begin

if(~nreset)

data <= 4'b0000

eale if(en)

data <= {data[2:0],in}

end

//并行输出咐掘

always@(posedge clk or negedge nreset)

begin

if(~nreset)

out <= 4'b0000

else if(en &&(count==2'b11))

out <= data

end

endmodule

我编译、仿真过了,没有问题,你原有的out<={out,in}应该写成像这样data <= {data[2:0],in}这就是一个移位寄存器!

这种情况坦漏唯一般都是状态机出问搜梁题了

data_input_1信号在在S3的情况下过早为0,会导致current_state不让培能进入S4状态.data_input_1必须值到下一个时钟周期开始时也为1,保证next_state最终为S4,这样才能在上升沿加载到current_state寄存器中,因此这个设计对于前导码之后第1位为0是失效的,第一位为1则可以运行,你可以做个实验验证一下.

解决方案:用个寄存器先对输入信号同步采样一下.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12563712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存