ZKX's LAB

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

2020-10-14知识14

高手来看看这个verilog串并转换状态机程序的时序仿真 感觉没什么问题 我测试了下 输入串码1111 101你可以用我的tb跑跑看module test_test();reg sys_clk;reg sys_rst;reg data_input_1;wire[2:0]xlat_address_port_1;always#5 sys_clk=~sys_clk;initial beginsys_clk=1'b0;sys_rst=1'b0;data_input_1=1'b0;10 sys_rst=1'b1;5;10 data_input_1=1'b1;10 data_input_1=1'b1;10 data_input_1=1'b1;10 data_input_1=1'b1;10 data_input_1=1'b1;10 data_input_1=1'b0;10 data_input_1=1'b1;10 data_input_1=1'b0;endserial_in serial_insys_clk(sys_clk),sys_rst(sys_rst),data_input_1(data_input_1),xlat_address_port_1(xlat_address_port_1)endmodule

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

用状态机如何实现并串转换verilog 我给你该了两处,一是你的分频部分,由于你采用的不是50%的占空比,而又要把得到的频率用做时钟,很可能造成后面数据无法满足建立和保持时间导致错误,该后的代码如下:always@(posedge clk)beginif(counter_224='d112)/224分频的计数器,64kbeginclk_224~clk_224;counter_224;endelsecounter_224;endalways@(posedge clk)beginif(counter_128='d64)/128分频的计数器,112kbeginclk_128~clk_128;counter_128;endelsecounter_128;end还有就是你的并转串的部分,我没有用移位寄存器的方式而是采用状态机来实现的,你的代码的一个错误就是hanming_encode是7位的不是6位,还有个人比较喜欢状态机,可能看上去它很繁琐,其实这中思想应用广泛,移位寄存器虽然不繁但是老容易出错(我指在一些复杂的代码里),状态机从视觉上来说比较繁琐,可是很容易理解。代码如下:reg[7:0]state;always@(posedge clk_128)/并行输入,串行输出begincase(state)state1:begin hanming_out[0];state;endstate2:begin hanming_out[1];state;endstate3:begin hanming_out[2];state;endstate4:begin hanming_out[3];state;endstate5:begin hanming_out[4];state;endstate。

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

哪位大神告诉一个,很简单的Verilog串并转换,UART接收器

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

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

#uart#input#begin#锁存器#reset

qrcode
访问手机版