用verilog编写串并转换器的程序,要有详细注识释 reg[7:0]data;reg[2:0]cnt;always@(posedge clk or posedge rst)if(rst)/复位高有效reg;elsereg[7:0],din};din是输入串行数据,假设输入数据高位在前这是一个移位寄存器always@(posedge clk or posedge rst)if(rst)cnt;elseif(din_valid)/输入串行时能有效if(cnt=7)cnt;elsecnt;计数器,用来计算移位次数,移位8次在以后产生一个有效数据elsecnt;always@(posedge clk or posedge rst)if(rst)dout;dout_en;elseif(cnt=7)dout;如果计数器记到7,那么输出一个有效的8位数据dout_en;elsedout;dout_en;关于verilog实现的串并转换功能 串并转换很简单,就是移位寄存器,后面最好跟一个锁存器,实现你所要求的功能需要四位移位寄存器和四位锁存器,锁存器的作用就是保持并行数据在移位时不发生变化: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)beginif(~nreset)count;else if(en)count;end移位always@(posedge clk or negedge nreset)beginif(~nreset)data;eale if(en)data[2:0],in};end并行输出always@(posedge clk or negedge nreset)beginif(~nreset)out;else if(en&(count=2'b11))out;endendmodule我编译、仿真过了,没有问题,你原有的out,in}应该写成像这样data[2:0],in};这就是一个移位寄存器!verilog并串转换和串并转换问题 always@(posedge pclk,posedge reset)beginif(reset)beginp;endelse beginp;endendalways@(posedge sclk,posedge reset)beginif(reset)ser_d;elsebeginif(x!7)begin{p,ser_d},p};endelse ser_d[0];endend这里编译器没报错吗?p有两种驱动还有隔离不同时钟域最好要用fifo的,我就在你的基础上改了`timescale 1ns/1nsmodule p2s2p(reset,pclk,sclk,din,dout);input reset,pclk,sclk;input[7:0]din;output reg[7:0]dout;reg ser_d;reg[7:0]d,p,q;reg[2:0]x;reg s;always@(posedge sclk,posedge reset)beginif(reset)beginp;endelse if(x=1)beginp;endelse beginp,p[7:1]};endendalways@(posedge sclk,posedge reset)beginif(reset)ser_d;elsebeginser_d[0];endendalways@(posedge sclk,posedge reset)beginif(reset)x;else beginx;endendalways@(posedge sclk,posedge reset)beginif(reset)s;else beginif(x=2)s;else s;endendalways@(posedge sclk,posedge reset)beginif(reset)d;else begind,d[7:1]};endendalways@(posedge sclk,posedge reset)beginif(reset)q;else beginif(s)q;endendalways@(posedge pclk,用状态机如何实现并串转换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;endstateverilog并串转换和串并转换问题 always@(posedge pclk,posedge reset)beginif(reset)beginp;endelse beginp;endendalways@(posedge sclk,posedge reset)beginif(reset)ser_d;elsebeginif(x!7)begin{p,ser_d},p};endelse ser_d[0];endend这里编译器没报错吗?p有两种驱动还有隔离不同时钟域最好要用fifo的,我就在你的基础上改了`timescale 1ns/1nsmodule p2s2p(reset,pclk,sclk,din,dout);input reset,pclk,sclk;input[7:0]din;output reg[7:0]dout;reg ser_d;reg[7:0]d,p,q;reg[2:0]x;reg s;always@(posedge sclk,posedge reset)beginif(reset)beginp;endelse if(x=1)beginp;endelse beginp,p[7:1]};endendalways@(posedge sclk,posedge reset)beginif(reset)ser_d;elsebeginser_d[0];endendalways@(posedge sclk,posedge reset)beginif(reset)x;else beginx;endendalways@(posedge sclk,posedge reset)beginif(reset)s;else beginif(x=2)s;else s;endendalways@(posedge sclk,posedge reset)beginif(reset)d;else begind,d[7:1]};endendalways@(posedge sclk,posedge reset)beginif(reset)q;else beginif(s)q;endendalways@(posedge pclk,Verilog如何用移位操作符\ 恩 移位寄存器的话这里有两个例子,楼主你参考一下第一个是用位拼接符来做的,在百度上输入“Verilog 串并转换”很容易就查到了,这个是别人的函数,我把名字换成你的,可以直接用到自己的应用中。module Serial_to_Para(clk,reset,en,in,out);input clk,reset,en,in;output[3:0]out;reg[3:0]out;always@(posedge clk)beginif(reset)out;elseif(en)out[2:0],in};使用连接运算符endendmodule上面那个out[2:0],in};这一句可以换成out,out[3:1]};这样就变成了从高位移入,很容易改成双向移位寄存器。另外一种是比较贴近楼主设计思想的代码例子了,在百度可以搜到,这里放出来你可以参考一下。module Serial_to_Para(clk,rst,in,out)input clk,rst;input in;output[3:0]out;wire[3:0]out;reg[3:0]shiftreg;always@(posedge clk or negedge rst)/异步清零if!rst)shiftreg;else beginshiftreg[0];shiftreg[1][0];shiftreg[2][1];shiftreg[3][2];endassign out=shiftreg;endmodule猜测一下,楼主想要使用“”运算符是为了达到D触发器级联实现串并转换的效果对吧?如果是的话那么第二个例子刚好是这个了。对于你的代码中操作造成仿真结果不正确的情况,还verilog4位数字进制转换的设计 输出是是什么?猜测一下,输出是2个4bit的二进制,分别表示高位,和低位。代码参考如下:module bin2dec(di,typ,do_msb,do_lsb);input[3:0]di;input typ;output[3:0]do_msb,do_lsb;always@(*)if(typ)/十进制输出beginif(di>=4'd10)begindo_msb=4'd1;do_lsb=di-4'd10;elsebegindo_msb=4'd0;do_lsb=di;endendelse/八进制输出begindo_msb={3'b0,di[3]};do_lsb={1'b0,di[2:0]};endendmoduleVerilog HDL中实现简单的并串转换 always@(posedge clk_128)/,状态机从视觉上来说比较繁琐;128分频的计数器,你的代码的一个错误就是hanming_encode是7位的不是6位;counter_224+8' end else counter_关于verilog实现的串并转换功能 串并转换很简单,就是移位寄存器,后面最好跟一个锁存器,实现你所要求的功能需要四位移位寄存器和四位锁存器,锁存器的作用就是保持并行数据在移位时不发生变化: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)beginif(~nreset)count;else if(en)count;end移位always@(posedge clk or negedge nreset)beginif(~nreset)data;eale if(en)data[2:0],in};end并行输出always@(posedge clk or negedge nreset)beginif(~nreset)out;else if(en&(count=2'b11))out;endendmodule我编译、仿真过了,没有问题,你原有的out,in}应该写成像这样data[2:0],in};这就是一个移位寄存器!高手来看看这个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
随机阅读
- 郫县三道堰镇水乡街建嘉水尚明珠五楼房价现在是多少?89平米简装房能够卖多少? 了解的回答下,谢谢。 成都三道堰水乡颐苑二手房
- 12.25是圣诞节也是我生日! 又是圣诞节又是生日
- 坐几路去沧州南环小学 从沧州职业技术学院去南环小学的公交
- 传送带与水平面的夹脚
- 下水道井盖坏了找哪个部门? 排水井树脂井盖
- 白切羊肉很柴 炖出来的羊肉发柴怎么回事,怎样炖出来的羊肉好吃,软而不柴?
- 常州遥观镇碧水云庭房价 常州遥观观澜云庭附近有没有好的英语辅导班
- 点餐购物车 饿了么APP如何对购物车内的订餐进行结算
- 科学实验装置蒸发结晶 蒸发结晶用什么仪器
- 自来水倒流水表反转 停水时水管里的自来水会不会回流水表倒转?
- 桂林熊虎山庄吃人 现在桂林熊虎山庄的个人票价是多少 团体票多少 急需
- 急!急!急!求《羊腿与谋杀》lamb to the slaughter 中文翻译,只是这一篇,不是那一本书。答好加分 安静的呆在一起英文翻译
- 油焖辣椒 东北油焖尖椒的家常做法文字
- “不可欠女孩子的感情债”这句话是什么意思? 感情欠的债啥意思
- 水份测试仪ms 7000ha ms-100水份测试仪显示h是什么原因
- 网购再来一包怎么兑换 网上买水果靠谱吗?
- 郑州建行龙卡汽车卡洗车点 南阳五中冉鑫
- 乌海市伟立机械制造有限责任公司怎么样? 乌海市海勃湾锦海机械制造厂
- 有同理心的成语
- 有一个陌生人一直加我好友 QQ总有陌生人加我好友是怎么回事