verilog串并转换并串转换_第1页
verilog串并转换并串转换_第2页
verilog串并转换并串转换_第3页
verilog串并转换并串转换_第4页
verilog串并转换并串转换_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上1.设计名称:38译码器带使能端的主要功能:实现38译码功能,并且在使能段处于低电平是输出为设计框图:设计代码:module decoder3_8(a,b,ena);input 2:0 a;input ena;output 7:0 b;reg 7:0 b;always (ena,a)if(!ena)begin b=8'b;endelse begincase(a)3'b000: b=8'b;3'b001: b=8'b;3'b010: b=8'b;3'b011: b=8'b;3'b100: b

2、=8'b;3'b101: b=8'b;3'b110: b=8'b;3'b111: b=8'b;default: b=8'b;endcaseendendmodule仿真代码:timescale 1ns/1nsmodule tb; reg 2:0 a; reg ena; wire 7:0 b; initial begin a = 3'b000; ena = 1'b0; #50; ena = 1'b1; #50; a=3'b001; #50; a=3'b010; #50; a=3'b011

3、; #50; a=3'b100; #50; a=3'b101; #50; a=3'b110; #50; a=3'b111; #50; $ stop; end decoder3_8 udecoder3_8( .a(a), .ena(ena), .b(b) );endmodule仿真结果:辅助说明:当ena为低电平时,无论a为何值,总是输出,当ena为高电平时,输出即随a的数值变化而变化,当a为001时,b的值变为;当a为010时,b的值变为,这与设计时的功能是一致的。_2.设计名称:83编码器带使能端的和优先级主要功能:实现83编码功能,并且在使能段处于低电平是输

4、出为000,同时最高位的优先级最高设计框图:设计代码:module undecoder8_3(a,b,ena);input 7:0 a;input ena;output 3:0 b;reg 3:0 b;always (ena,a)if(!ena)begin b=3'b000;endelse if(a7) b=3'b111;elseif(a6) b=3'b110;elseif(a5) b=3'b101;elseif(a4) b=3'b100;elseif(a3) b=3'b011;elseif(a2) b=3'b010;elseif(a1)

5、 b=3'b001;elseif(a0) b=3'b000;else b=3'b000;endmodule仿真代码:module tb; reg 7:0 a; reg ena; wire 2:0 b; initial begin a = 8'b; ena = 1'b0; #50; ena = 1'b1; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; a=8'b; #50; $stop;

6、 end undecoder8_3 unit1_undecoder8_3( .a(a), .ena(ena), .b(b) );endmodule仿真结果:辅助说明:当ena为低电平时,无论a为何值,总是输出000,当ena为高电平时,输出即随a的数值变化而变化,当a为时,b为110,当a为是,b为101以此类推,同时最后一个波形为,当a为时,b为111,体现了优先译码的功能,此结果和当初设计的功能一致的。_3.设计名称:设计一个1:1的3分频器主要功能:实现3分频,同时高低电平比为1:1设计框图:设计代码:这个设计可以利用模三计数器分别在时钟的上升和下降沿设计一个高低电平为1:2的3分频,然

7、后将两个波形相或即能得到结果。代码一:module Devider2_1( /inputs clk, rst_n, /outputs opt1, opt2, opt); input clk; input rst_n; output opt; output opt1; output opt2; reg opt1; reg 1:0 temp1; reg opt2; reg 1:0 temp2; always(posedge clk) begin if(!rst_n) begin temp1 <= 2'd0; opt1 <= 1'b0; end else if(temp1

8、=1) begin opt1 <=1'b1; temp1 <= temp1 + 2'd1; end else if(temp1=2'd2)begin opt1 <= 1'b0; temp1 <= 2'd0;end elsebegin temp1 <= temp1+2'd1;endend always(negedge clk) begin if(!rst_n) begin temp2 <= 2'd0; opt2 <= 1'b0; end else if(temp2=1) begin opt2

9、 <=1'b1; temp2 <= temp2 + 2'd1; end else if(temp2=2'd2)begin opt2 <= 1'b0; temp2 <= 2'd0; end else begin temp2 <= temp2+2'd1; end end assign opt = opt1 | opt2; endmodule同时也可以用同样的方法设计一个在上升和下降沿高低电平2:1的3分频器,将两个波形相与即可。代码二:module Devider2_1( /inputs clk, rst_n, /out

10、puts opt1, opt2, opt); input clk; input rst_n; output opt; output opt1; output opt2; reg opt1; reg opt2; reg 1:0 temp1; reg 1:0 temp2; always(posedge clk) begin if(!rst_n) begin temp1 <= 2'd0; opt1 <= 1'b0;end /reset else if(temp1=2'd0) begin opt1<=1'b1; temp1 <= temp1 +

11、2'd1;end else if(temp1=2'd1)begin opt1 <=1'b1; temp1 <= temp1 + 2'd1;end else if(temp1=2'd2)begin opt1 <= 1'b0; temp1 <= 2'd0;endend always(negedge clk) begin if(!rst_n)begin temp2 <= 2'd0; opt2 <= 1'b0;end /reset else if(temp2=2'd0) begin op

12、t2<=1'b1; temp2 <= temp2 + 2'd1;end else if(temp2=2'd1) begin opt2 <=1'b1; temp2 <= temp2 + 2'd1;end else if(temp2=2'd2)begin opt2 <= 1'b0; temp2 <= 2'd0;endend assign opt = opt1&&opt2;endmodule仿真代码:上面两个代码的仿真代码是一样的。timescale 1ns/1nsmodule tb;

13、 /inputs reg clk; reg rst_n; /outputs wire opt1; wire opt2; wire opt; /generate clk always #10 clk = clk; /tb starts Initial begin clk = 1'b0; rst_n = 1'b0; #100; rst_n = 1'b1; #500; $stop; end /Instant DUT Devider2_1 uDevider2_1( /inputs .clk(clk), .rst_n(rst_n), /outputs .opt1(opt1), .

14、opt2(opt2), .opt(opt) );endmodule仿真结果:(a)高低电平为1:2设计的(b)高低电平为2:1设计的辅助说明:(a) 中opt1为上升沿触发的高低电平1:2的3分频,opt2为下降沿触发的高低电平为1:2的3分频,可以看出在rst_n为0进行清复位,之后在rst_n为1是进行分频,最后所得opt结果为1:1的3分频,符合设计要求。(b)中opt1为上升沿触发的高低电平2:1的3分频,opt2为下降沿触发的高低电平为2:1的3分频,可以看出在rst_n为0进行清复位,之后在rst_n为1是进行分频,最后所得opt结果为1:1的3分频,符合设计要求。_4.设计名称:

15、七人表决器主要功能:7个人进行表决,人数过4则LED灯亮,否则灯灭设计框图:设计代码:module v(vote,rst,Q);input 6:0vote;input rst;output Q;reg Q;reg 2:0c;always (vote or rst)begin c=0; if(rst) c=3'b000; else begin c=c+vote0; c=c+vote1; c=c+vote2; c=c+vote3; c=c+vote4; c=c+vote5; c=c+vote6; endif(c>3) Q=1;else Q=0; endendmodule仿真代码:ti

16、mescale 1ns/1nsmodule q; reg rst; reg 6:0vote; wire Q; initial begin rst=0; vote=7'b;#50; rst=1;#50; rst=0;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; vote=7'b;#50; $stop;endv v_unit(.vote(vote),.rst(rst),.Q(Q);endmodule仿真结果:辅助说明:第一个表决为,有6人同

17、意,于是显示通过,Q为高电平,第二个单位是,rst复位信号显示为1,此时对表决器复位,于是Q清0,后面当rst为低电平时又可以开始表决,当最后一个表决信号只有1个人同意时,由于人数少于4,所以Q为0,不通过,结果与设计相仿。_5设计名称:十进制计数器的设计主要功能:使能端为高电平且复位信号为低电平是,进行模十同步计数,同时满10 的时候清0并且进位co置1,在一个始终后默认高位已经接受完进位信号将其清0。使能端为低电平时计数器保持输出不变,当使能端为高电平,且复位信号为高电平时,将计数器异步清0.设计框图:设计代码:module ten(clk,rst_tong,rst_yi,a,co,ena

18、); input clk; input rst_tong; input rst_yi; input ena; output 3:0 a; output co; reg 3:0a; reg co;always(posedge clk or posedge rst_yi)beginco<=0;if(rst_yi) begin a<=4'b0000; co<=0;endif(!ena) beginco<=0;endelsebegin if(rst_tong)begin a<=4'b0000; co<=0;end else if(a<4'

19、;b1001) a<=a+4'b0001;elseif(a=4'b1001)begin a<=4'b0000; co<=1;endendendendmodule仿真代码:timescale 1ns/1nsmodule tb; reg clk; reg rst_yi; reg ena; reg rst_tong; wire 3:0a; wire co; always #10 clk = clk; initial begin ena=0; clk = 1'b0; rst_yi= 1'b1; rst_tong=1'b0; #10; e

20、na=1; #14; rst_yi= 1'b0; #230; rst_yi= 1'b1; #20; rst_yi=1'b0; #20; ena=0; #30; rst_tong=1'b1; #500; $stop; end ten ten_unit(.clk(clk), .rst_yi(rst_yi), .rst_tong(rst_tong), .ena(ena), .a(a), .co(co) ); endmodule仿真结果:辅助说明:这个十进制计数器里面我设计了两个复位端口,一个是同步复位端口rst_tong,一个是异步复位端口rst_yi,从仿真图形中可

21、以看出,在使能端ena为低是计数器保持数值不变,输出全是0,当使能端ena为高电平的时候,当异步复位rst_yi为高电平是实现异步清零,这个可以在rst_yi的第二个高电平处看清楚,当rst_yi为低电平时,若rst_tong为低电平,实现正常计数,此时从0000计数到1001,在下一个时钟周期产生一个半个周期的进位高电平co,在并且计数a重新变为0,当rst-tong为高电平时,在时钟的上升沿进行同步置数此功能和当初的设计目标一致。_6:设计名称: 4路抢答器主要功能: 完成抢答功能,并且在抢答结束的时候清0,在下一次抢答开始之前按抢答键无效。设计框图:设计代码:module qiang(a

22、,b,start); input 3:0 a; input start; output 3:0b; reg 3:0b; reg 3:0temp; always(a or start)begin if(!start) begin temp=0; b=0; end else if(temp= 4'b0000) begin temp=a; b=temp; end end endmodule 仿真代码:timescale 1ns/1nsmodule tb; reg 3:0a; reg start; wire 3:0b; initial begin start=0; a=4'b0000;

23、 #10; start=1; #10; a=4'b0100; #10; a=4'b0110; #50; start=0; #10; a=4'b0100; #30; a=4'b0000; #50; start=1; #50; a=4'b1000; #50; $stop; end qiang qiang_unit( .a(a), .start(start), .b(b) );Endmodule仿真结果: 辅助说明:可以看出,当start为0,抢答器未启动时,输出为0000,当start为1时,此时a=0010,表明第二个人已经先按下抢答器,这是输出为0010

24、,之后a=0110,又有人再次之后按下抢答器,但是由于a【1】已经先按下,所以a【2】按下后还是只能显示0010,这就实现了抢答功能,当start=0是,这是输出清零,这是输入0100,由于抢答器未工作,所以输出还是0000,后面当start又是1的时候,这时候a【3】抢答成功,所输出又为1000,符合当初的设计功能。7.设计名称:并串转换主要功能:在没有数据输出时,输出为x,此时ready信号为高,若load信号也为高时,则将输入的数据传输给中间寄存器temp,然后resdy信号变为低电平,ready信号有temp【7】决定,当temp【7】中还有数据时,表明还没有全部转换完,则ready为

25、低,当temp【7】没有数据显示为x时,则ready为高,表明可以接收数据了。当接收完数据之后,在8个时钟周期将信号输出。设计框图:设计代码:module bcc(clk,ain,rst,bout,load,ready); input clk; input 7:0ain; input rst; input load; output bout; output ready; reg bout; reg 7:0temp; reg ready; always (posedge rst or posedge clk)begin if(rst)begin bout <=1'bx; temp

26、<=8'bxxxxxxxx; ready<=1;end else if(load && ready) temp<=ain;/if load is high leve and temp is empty,then,transport data if(temp7|!temp7) /temp7 has databegin bout<=temp7; /temp shift left,and temp0 equal x temp7:1<=temp6:0; temp0<=1'bx; ready<=0;end else begin b

27、out<=1'bx; ready<=1;end end endmodule仿真代码:timescale 1ns/1ns module bcc_tb; reg clk; reg 7:0ain; reg rst; reg load; wire ready; wire bout; always #10 clk = clk; initialbegin clk=0; rst=1; load=0; ain=11; #10; rst=0; #10; load=1; #20; load=0; #20; ain=8; #40; load=1; #20; load=0; #100; load=

28、1; #20; load=0; #200; rst=1; #10; $stop;end bcc bcc_unit( .clk(clk), .ain(ain), .rst(rst), .load(load), .bout(bout), .ready(ready) ); Endmodule仿真结果:辅助说明:可以从仿真图形中看出,在rst为高时,进行复位,当rst为低时,由于temp里面没有数据,所以ready信号为高,此时表明temp可以接受数据,若load信号为高,之后temp则接收到ain的信号,此时temp里面有了数据,则ready信号为0,不能再传输数据,此时后8个时钟周期输出为,完成串

29、并转换,期间就算load为高电平,但是ready信号为低,所以不会传输下一个数据,只有当之后ready为高电平时,此时财货执行下一个数据的传输。此仿真波形与我当时设计的目标相符,基本达到设计目标。8.设计名称:串并转换主要功能:当rst为高电平时进行复位,当rst为低电平时,若 load为高电平且ready为高电平(ready信号有temp决定,若temp里面的数据已经传满则ready为低电平,若temp数据还未传满,则ready为高电平)时将输入数据传给自己定义的中间寄存器temp,若temp接受完8位数据,则ok信号为高电平并且将ready置为低电平,就可以将temp的值传给bout输出,传输完毕之后temp又被清空,此时ok又置为低电平,ready显示高电平。设计框图:设计代码:module cbc(clk,ain,load,rst,ready,bout,ok); input clk; input ain; input load; input rst; output ready; output 7:0bout; output ok; reg ready; reg 7:0bout; reg 7:0temp; reg ok; always (posedge clk or posedge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论