




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题目1:数字集成电路的verilog HDL描述与仿真。要求:(1)学习使用Modelsim设计和仿真软件; (2)练习教材7.2.1中的例子; (3)掌握设计代码和测试代码的编写; (4)掌握测试仿真流程; (5)掌握Modelsim软件的波形验证方式。module testbench_shiftregist; parameter shiftregist_width=4; reg shiftregist_width-1:0data_load; reg load,clk,rst_n,ctr_shiftright,ctr_shiftleft,data_shiftright,data_shiftleft; wire shiftregist_width-1:0data_out; always #5 clk=clk; initial begin data_load=0;load=0;rst_n=1;ctr_shiftright=0;ctr_shiftleft=0;clk=0;data_shiftright=0;data_shiftleft=0;end initial begin #10 rst_n=0;#3 rst_n=1;end initial begin #15 load=1;data_load=4b1010;#10 load=0;end initial begin #30 ctr_shiftright=1;#20 data_shiftright=1;#20 ctr_shiftright=0;#20ctr_shiftleft=1;#25data_shiftleft=1;#20data_shiftleft=0;end shiftregist U1(.clk(clk),.rst_n(rst_n),.load(load),.ctr_shiftright(ctr_shiftright),.ctr_shiftleft(ctr_shiftleft),.data_shiftright(data_shiftright),.data_shiftleft(data_shiftleft),.data_load(data_load),.data_out(data_out);endmodulemodule shiftregist(data_out,clk,rst_n,load,data_load,ctr_shiftright,ctr_shiftleft,data_shiftright,data_shiftleft); parameter shiftregist_width=4; outputshiftregist_width-1:0data_out; input shiftregist_width-1:0data_load; input load,clk,rst_n,ctr_shiftright,ctr_shiftleft,data_shiftright,data_shiftleft; regshiftregist_width-1:0data_out; always(posedge clk or negedge rst_n) if(!rst_n) data_out=0; else if(load) data_out=data_load; else if(ctr_shiftright) data_out=data_shiftright,data_outshiftregist_width-1:1; else if(ctr_shiftleft) data_out=data_outshiftregist_width-2:0,data_shiftleft; else data_out=data_out; endmodule题目2: 简述begin-end语句块和fork-join语句块的区别,并写出下面信号对应的程序代码begin-end语句块和fork-join语句块的区别:1. 执行顺序与作用:begin-end其中的语句按串行方式执行,可以用于综合电路程序和仿真测试程序。fork-join其中的语句按并行方式执行,不可以用于综合电路程序和仿真测试程序。2. 起始时间:begin-end语句块为首句开始执行的时间,fork-join语句块为转入并行语句块的时间。3. 结束时间:begin-end语句块为最后一条语句执行结束的时间,fork-join语句块为执行时间最长的那条语句执行结束的时间。4. 行为描述的意义:begin-end语句块为电路中的数据在时钟及控制信号的作用下,沿数据通道中各级寄存器之间的传送过程。fork-join语句块为电路上电后,各电路模块同时开始工作的过程。Begin_end程序代码module b(A,B);output A,B;reg A,B;parameter T=10;initialbegin A=0;B=1; #T A=1;B=0; #T A=1;B=1; #T A=0;B=1; #T A=0;B=0; #T A=1;B=1; endendmodulefork_join程序代码module b(A,B);output A,B;reg A,B;parameter T=10;initialbegin A=0;B=1; #3T A=0; #5T A=1; #T B=0; #2T B=1; #4T B=0; endendmodule题目3. 分别用阻塞和非阻塞赋值语句描述如下图所示移位寄存器的电路图。T3非阻塞代码module clog(din,clk,out0,out1,out2,out3);input din,clk;output out0,out1,out2,out3;reg out0,out1,out2,out3;always(posedge clk)begin out3=out2;out2=out1;out1=out0;out0=din;endendmodule测试代码module test_clog; reg din,clk; wire out0,out1,out2,out3; always #10 clk=clk; always #100 din=din; clog U1(.clk(clk),.din(din),.out3(out3),.out2(out2),.out1(out1),.out0(out0); initial begin clk=0; din=1; endendmodule T3非阻塞代码module test_clog; reg din,clk; wire out0,out1,out2,out3; always #10 clk=clk; always #100 din=din; clog U1(.clk(clk),.din(din),.out3(out3),.out2(out2),.out1(out1),.out0(out0); initial sim:/test_block/clk sim:/test_block/din sim:/test_block/out3 sim:/test_block/out2 sim:/test_block/out1 sim:/test_block/out0 begin clk=0; din=1; endendmodule测试代码module test_clog; reg din,clk; wire out0,out1,out2,out3; always #10 clk=clk; always #100 din=din; clog U1(.clk(clk),.din(din),.out3(out3),.out2(out2),.out1(out1),.out0(out0); initial begin clk=0; din=1; endendmodule 题目4:(1) 分析16位同步计数器结构和电路特点16位同步计数器至少需要四个触发器,同步计数则时钟同步控制四个触发器的状态,通过固定周期的时钟,上升沿或下降沿电路就能进行开始逐次计数。(2) 用硬件描述语言进行设计程序如下:module counter_16(count,clk,reset,result); output count,result; input clk,reset; reg 3:0count; always(posedge clk) begin if(!reset) count=4b0000; else count=count+1; end assign result=count0|count1|count2|count3;endmodule(3) 编写测试仿真并进行仿真。测试程序如下;module test_counter_16; reg clk; reg reset; wire 3:0count,result; always #10 clk=clk; initial begin clk=0;reset=0; #20 reset=1; end counter_16 U1(.clk(clk),.reset(reset),.result(result),.count(count);题目5. 试用Verilog HDL门级描述方式描述如下图所示的电路.思路:通过电路分析可知,利用门级建模即可实现该电路,从左到右依次为非门,与门,或门。源程序如下:module five(D0,D1,D2,D3,S1,S2,Z);output Z;input D0,D1,D2,D3,S1,S2;wire w1,w2,w3,w4,w5,w6;not U1(w1,S1), U2(w2,S2);and U3(w6,D3,S2), U4(w5,D2,S1,w2), U5(w4,D1,S1,w1), U6(w3,D0,w1,w2);or U7(Z,w3,w4,w5,w6);endmodule测试程序module test_five;reg D0,D1,D2,D3,S1,S2;wire Z,w1,w2,w3,w4,w5,w6;five U1(D0,D1,D2,D3,S1,S2,Z);initial begin D0=1;D1=1;D2=1;D3=0;S1=1;S2=0; #10 D0=0;D1=0;D2=0;D3=1;S1=0;S2=1; #20 D0=1;D1=1;D2=1;D3=0;S1=1;S2=0; endendmodule题目6. 试用查找真值表的方式实现真值表中的加法器,写出Verilog HDL代码。CinainbinsumCout0000000110010100110110010101011100111111思路:根据所给真值表,将输出结果cout和sum用连接符连接起来以减少代码数量源程序module two_bits_fulladder(sum,cout,a,b,cin);output sum,cout;input a,b,cin;reg sum,cout;always(a or b or cin)case(a,b,cin) 3b000:cout,sum=a+b+cin; 3b001:cout,sum=a+b+cin; 3b010:cout,sum=a+b+cin; 3b011:cout,sum=a+b+cin; 3b100:cout,sum=a+b+cin; 3b101:cout,sum=a+b+cin; 3b110:cout,sum=a+b+cin; 3b111:cout,sum=a+b+cin; endcase endmodule测试程序module test_two_bits_fulladder; reg a,b,cin; wire sum,cout; two_bits_fulladder U1(.sum(sum),.cout(cout),.a(a),.b(b),.cin(cin); initial begin a=0;b=0;cin=0; #20 a=0;b=0;cin=1; #20 a=0;b=1;cin=0; #20 a=0;b=1;cin=1; #20 a=1;b=0;cin=0; #20 a=1;b=0;cin=1; #20 a=1;b=1;cin=0; #20 a=1;b=1;cin=1; #220 $finish; endendmodule题目7:设计16位同步加法器和乘法器要求:(1)分析16位同步加法器和乘法器结构和电路特点; (2)用硬件描述语言进行设计; (3)编写测试仿真并进行仿真。程序如下:思路:根据书上二位加法器改进而来,中间加一些16位变量即可。16位同步加法器:module test_sixteen_bit_adder; parameter adder16_width=16; reg adder16_width-1:0a,b; reg Cin; wire adder16_width-1:0sum; wire Cout; initial begin a=11;b=10;Cin=1;#20 a=8;b=15;Cin=0;#20 a=6;b=13;Cin=1; end sixteen_bit_adder U1(.a(a),.b(b),.Cin(Cin),.Cout(Cout),.sum(sum);endmodule测试程序:module sixteen_bit_adder(a,b,sum,Cout,Cin); parameter width=16; output width-1:0sum; output Cout; input width-1:0a,b; input Cin; assign Cout,sum=a+b+Cin;endmodule 16位同步乘法器module test_sixteen_bit_mul; parameter w=16; reg w-1:0a,b; wire w*2-1:0mul; initial begin a=2;b=2; endinitial begin #10 a=100;#15 b=100; end sixteen_bit_mul U1(.a(a),.b(b),.mul(mul);endmodule测试程序:module sixteen_bit_mul(a,b,mul); parameter w=16; input w-1:0a,b; output w*2-1:0mul; assign mul=a*b;endmodule题目8:将下面的状态转移图用Verilog HDL描述。思路:状态机的输入只与状态的跳转有关,与状态机的输出无关,因此该状态机为摩尔型状态机。下面为三段式描述方式:module state4(clk,out,step,clr); output 2:0out; input step,clk,clr; reg 2:0out; reg 1:0state,next_state; always (posedge clk) state=next_state; always (state or clr) if(clr) next_state=0; else case(state) 2b00: case(step) 1b0:begin next_state=2b00;out=3b001;end 1b1:begin next_state=2b01; out=3b010;end endcase 2b01: begin out=3b100; next_state=2b10; end 2b11: case(step) 1b0:begin next_state=2b11;out=3b111;end 1b1:begin next_state=2b00;out=3b001;end endcase 2b10: case(step) 1b0:begin next_state=2b00;out=3b001;end 1b1:begin next_state=2b11;outy)=(10,12,14); (b=y)=(10,12,14); (s=y)=(11,13,15); (s0=y)=(11,13,15); endspecifyendmodulemodule f(a,s,b,y); input s,a,b; output y; wire s0; not #(4)U1(s0,s); e U2(a,s,b,y,s0);endmodulemodule test; reg a,s,b; wire y;f U1(a,s,b,y); initial begin a=1;s=0;b=1;#20 a=0;s=1;b=1;#20 a=1;s=0;b=0; endendmodule题目10.设计一个8位数字显示的简易频率计。要求:能够测试10Hz10MHz方波信号;电路输入的基准时钟为1Hz,要求测量值以8421BCD码形式输出;系统有复位键;采用分层次分模块的方法,用Verilog HDL进行设计。思路:首先以标准时钟为准,在待测信号高电平期间测试标准时钟的上升沿次数,最后乘以2即可得到正确结果,最后把二进制结果通过二进制8421BCD转换模块转换成8421BCD结果,最终输出。module f_test(clk, measureclk, clk1, clear, outBCD); output 31:0outBCD; /output 23:0Q1; input clk, measureclk, clear, clk1; reg 23:0 Q1; count U1(.testclock(measureclk), .clock(clk), .clear(clear), .Q0(Q1); transform U2(.Q2(Q1), .outtrans(outBCD), .clock1(clk1); endmodule module count(testclock, clock, clear, Q0); input testclock, clear, clock; output Q0; reg 23:0Q, Q0; always (posedge testclock or negedge clear) begin if(!clear) Q=0; else if(clock) Q=Q+2b10; else begin Q0=Q; Q=0; end end endmodule module transform(Q2, outtrans, clock1); input 23:0Q2; input clock1; output 31:0outtrans; reg 31:0 outtrans_r; reg 23:0Q2_r; reg 31:0tp; integer i; assign outtrans = outtrans_r; always (posedge clock1) begin if(Q2=24b1001_1000_1001_0110_1000_0000) outtrans_r = 0; else begin Q2_r = Q2; tp=0; for(i=0; i4d4) tp3:0 = tp3:0+4d3; if(tp7:44d4) tp7:4 = tp7:4+4d3; if(tp11:84d4) tp11:8 = tp11:8+4d3; if(tp15:124d4) tp15:12 = tp15:12+4d3; if(tp19:164d4) tp19:16 = tp19:16+4d3; if(tp23:204d4) tp23:20 = tp23:20+4d3; if(tp27:244d4) tp27:24 = tp27:24+4d3; if(tp31:284d4) tp31:28 = tp31:28+4d3; Q2_r = Q2_r1; outtrans_r = tp30:0,Q20; end end end endmodule 题目11. 用Verilog HDL设计一个4位LED显示器的动态扫描译码电路。要求:4个七段显示器共用一个译码驱动电路;显示的数码管清晰明亮,无闪烁现象发生。思路:利用case语句,输入一个0-9之间的数,即可对应相应的编码。从而达到题目要求。module LED(out,in); output out; input in; reg6:0out; wire3:0in; always(in) begin case(in) 4d0:out=7b1111110; 4d1:out=7b0110000; 4d2:out=7b1101101; 4d3:out=7b1111001; 4d4:out=7b0110011; 4d5:out=7b1011011; 4d6:out=7b1011111; 4d7:out=7b1110000; 4d8:out=7b1111111; 4d9:out=7b1111011; endcase endendmodulemodule w(in1,in2,in3,in4,in5,in6,in7,in8,in9,in10,out1,out2,out3,out4 ,out5,out6,out7,out8,out9,out10); output out1,out2,out3,out4 ,out5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年甘肃省庆阳市宁县三年级数学第一学期期末考试试题含解析
- 2025-2026学年福建泉州泉港区三上数学期末综合测试试题含解析
- 2024年龙岩市武平县数学三上期末模拟试题含解析
- 2024年霍尔果斯市数学三年级第一学期期末调研试题含解析
- 公共场所常见急救处理课件
- 护理教育与研究动态试题及答案
- 护士职业生涯不可或缺的试题与答案
- 卫生资格考试逐项解析与总结试题及答案
- 拔罐与护理技能试题及答案讨论
- 2025年卫生资格考试的试卷结构分析试题及答案
- 全套教学课件《工程伦理学》
- 国内外经济形势和宏观经济政策展望课件
- DBJ∕T13-357-2021 福建省应急建筑安全技术标准
- 基础会计教材电子版
- 浅析火电厂成本
- 加强民航人才队伍建设实施方案
- 品质英语术语
- 英汉语法对比研究
- 江苏医院目录--卫生厅数据
- 广州花城汇UUPARK招商手册
- 回旋镖飞行原理
评论
0/150
提交评论