西安邮电大学verilog HDL 实验报告
- 格式:doc
- 大小:76.50 KB
- 文档页数:18
VerilogHDL实验报告实验一Modelsim仿真软件的使用一、实验目的(1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容1、实验要求用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。
2、步骤1、建立工程2、添加文件到工程3、编译文件4、查看编译后的设计单元5、将信号加入波形窗口6、运行仿真3、方法moduleyihuo (a,b,c);inputa,b;output c;assign c=a^b;endmodule测试程序:module t_yihuo;reg a,b; wire c;initial begin a=0; forever #20 a=~a; end initial begin b=0; forever #30 b=~b; endyihuou1(a,b,c);endmodule二、实验结果波形图:三、分析和心得通过这次的实验,我基本熟悉Modelsim软件,掌握了Modelsim软件的编译、仿真方法。
同时在编写程序的过程中,加深了我对课上所讲的HDL的语法的认识。
实验二简单组合电路设计一、实验目的(1)掌握基于Modelsim的数字电路设计方法(2)熟练掌握HDL 程序的不同实现方法二、实验内容1、实验要求设计一个三人表决器(高电平表示通过),实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。
使用 Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真。
2、方法module test(a,b,c,s);inputa,b,c;output s;assign s=c|(b&a);endmodulemodulet_test;rega,b,c;wire s;initialbegina=0;forever#10 a=~a;endinitialbeginb=0;forever #20 b=~b;endinitialbeginc=0;forever#40 c=~c;endtest u1(a,b,c,s);endmodule三、实验结果四、分析和心得通过本次实验,我掌握基于Modelsim的简单数字电路设计方法,且尝试了用不同方法实现功能,三人表决器可以通过testbench测试程序实现,也可以利用always模块实现,可见程序的设计思想是很重要的。
Verilog HDL实验报告学院:应用科学学院班级:电科13-2班姓名:学号:实验一组合逻辑电路设计(1)实验目的(1)熟悉FPGA设计流程;(2)熟悉DE2开发板的基本元件使用(开关、发光二极管);(3)学习基本组合逻辑元件的Verilog HDL设计以及实现(数据选择器);(4)掌握连续赋值语句使用;实验内容本实验的目的是学习如何连接一个简单的外部输入、输出器件到FPGA 芯片以及如何在FPGA器件上实现逻辑电路控制简单外部器件。
考虑使用DE2开发板上拨动开关SW17-0(toggle Switch)作为电路的输入。
使用发光二极管(Light Emitt-ing Diodes,LEDs)和7段显示数码管(7-segment Display)作为电路的输出。
第1部分连续赋值语句步骤1、新建Quartus II工程,选择Cyclone II EP2C35F672C6作为目标芯片,该芯片是DE2开发板上的FPGA芯片;2、编写Verilog HDL代码加入到Quaruts II工程;3、引脚分配,并编译工程该工程;4、将编译好的电路下载到FPGA器件。
扳动拨动开关观察相应的发光二极管显示,验证电路功能是否正确;代码module part1(input wire[2:0]SW,output wire LEDR);wire r_g,s_g,qa,qb;and u1(r_g, SW[0], SW[1]);and u2(s_g, SW[1], SW[2]);nor u3(qa, r_g, qb);nor u4(qb, qa, s_g);assign LEDR = qa;endmodule第2部分简单的数据选择器步骤1 .新建Quartus II工程;2.在工程中加入8位宽的2选1数据选择器Verilog HDL代码。
使用DE2开发板上的SW17作为输入s,开关SW7-0作为输入X,SW15-8作为输入Y。
Verilog实验报告班级:学号:姓名:实验1 :用 Verilog HDL 程序实现直通线1 实验要求:(1) 编写一位直通线的 Veirlog HDL 程序.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4) 建议用模式 52 试验程序:module wl(in,out);input in;output out;wire out;assign out=in;endmodule3 测试基准:`include “wl.v”module wl_tb;reg in_tb;wire out_tb;initialbeginin_tb =0;#100 in_tb =1;#130 in_tb =0;endendmodule4 仿真图形:实验2 :用 Verilog HDL 程序实现一位四选一多路选择器1实验要求:(1) 编写一位四选一多路选择器的 Veirlog HDL 程序.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4)建议用模式 52 试验程序:module mux4_to_1 (out,i0,i1,i2,i3,s1,s0);output out;input i0,i1,i2,i3;input s1, s0;reg out;always @ (s1 or s0 or i0 or i1 or i2 or i3)begincase ({s1, s0})2'b00: out=i0;2'b01: out=i1;2'b10: out=i2;2'b11: out=i3;default: out=1'bx;endcaseendendmodule3 测试基准:`include "mux4_to_1.v"module mux4_to_1_tb1;reg ain,bin,cin,din;reg[1:0] select;reg clock;wire outw;initialbeginain=0;bin=0;cin=0;din=0;select=2'b00;clock=0;endalways #50 clock=~clock;always @(posedge clock)begin#1 ain={$random} %2;#3 bin={$random} %2;#5 cin={$random} %2;#7 din={$random} %2;endalways #1000 select[0]=!select[0];always #2000 select[1]=!select[1];mux4_to_1 m(.out(outw),.i0(ain),.i1(bin),.i2(cin),.i3(din),.s1(select[1]),.s0(select[0])); endmodule4 仿真图形:实验3:用 Verilog HDL 程序实现十进制计数器1实验要求:(1) 编写十进制计数器的 Veirlog HDL 程序. 有清零端与进位端, 进位端出在输出为 9 时为高电平.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4) 自行选择合适的模式2 实验程序:module counter_10c (Q, clock, clear, ov);output [3:0] Q;output ov;input clock, clear;reg [3:0] Q;reg ov;initial Q=4'b0000;always @ (posedge clear or negedge clock)beginif (clear)Q<=4'b0;else if (Q==8)beginQ<=Q+1;ov<=1'b1;endelse if (Q==9)beginQ<=4'b0000;ov<=1'b0;endelsebeginQ<=Q+1;ov<=1'b0;endendendmodule3 测试基准:`include"./counter_10c.v"module counter_10c_tb;wire[3:0] D_out;reg clk,clr;wire c_out;reg[3:0] temp;initialbeginclk=0;clr=0;#100 clr=1;#20 clr=0;endalways #20 clk=~clk;counter_10c m_1(.Q(D_out),.clear(clr),.clock(clk),.ov(c_out)); endmodule4 仿真波形:实验4 :用 Verilog HDL 程序实现序列检测器1 实验要求:、(1) 编写序列检测器的 Veirlog HDL 程序. 检测串行输入的数据序列中是否有目标序列5'b10010, 检测到指定序列后, 用一个端口输出高电平表示.(2) 编写配套的测试基准.(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.(4) 自行选择合适的模式2试验程序:module e15d1_seqdet( x, z, clk, rst);input x,clk, rst;output z;reg [2:0] state;wire z;parameter IDLE = 3 'd0,A = 3'd1,B = 3'd2,C = 3'd3,D = 3'd4,E = 3'd5,F = 3'd6,G = 3'd7;assign z =(state==D && x==0)?1:0;always @(posedge clk or negedge rst)if(!rst)beginstate<=IDLE;endelsecasex(state)IDLE: if(x==1)state<=A;else state<=IDLE;A: if (x==0)state<=B;else state<=A;B: if (x==0)state<=C;else state<=F;C: if(x==1)state<=D;else state<=G;D: if(x==0)state<=E;else state<=A;E: if(x==0)state<=C;else state<=A;F: if(x==1)state<=A;else state<=B;G: if(x==1)state<=F;else state <=G;default: state<=IDLE;endcaseendmodule3测试基准:`include"e15d1_seqdet.v"`timescale 1ns/1ns`define halfperiod 20module e15d1_seqdet_tb;reg clk, rst;reg [23:0] data;wire z;reg x;initialbeginclk =0;rst =1;#2 rst =0;#30 rst =1;data= 20 'b1100_1001_0000_1001_0100;#(`halfperiod*1000) $stop;endalways #(`halfperiod) clk=~clk;always @ (posedge clk)begin#2 data={data[22:0],data[23]};x=data[23];ende15d1_seqdet m(.x(x),.z(z),.clk(clk),.rst(rst)); endmodule4仿真波形:。
verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。
它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。
本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。
实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。
通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。
我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算符和条件语句实现了与门的功能。
然后,我创建了一个测试模块,用于验证与门的正确性。
通过输入不同的组合,我能够验证与门的输出是否符合预期。
接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。
通过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。
实验二:时序电路设计在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。
时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变其输出。
我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据的存储和传输功能。
然后,我创建了一个测试模块,用于验证寄存器的正确性。
通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。
接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。
我还添加了一个复位输入,用于将计数器的值重置为初始状态。
通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。
通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。
实验三:组合电路设计在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。
组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。
Verilog实验报告实验一简单组合逻辑电路的设计一实验要求1.用verilog HDL语言描写出简单的一位数据比较器及其测试程序;2.用测试程序对比较器进行波形仿真测试;画出仿真波形;3.总结实验步骤和实验结果。
二实验原理与内容4.这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。
在Verilog HDL中,描述组合逻辑时常使用assign结构。
注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。
5.模块源代码测试模块:6.波形图:四结实验步骤和实验结果由图可看出,每当输入的电位值不同时输出为0,这与实验要求一致,相同时输出为1,故此程序是可行的。
实验三在verilog HDL中使用函数一实验要求1.掌握函数在模块中的使用2.用测试程序进行波形仿真测试;画出仿真波形3.总结实验步骤和实验结果二实验原理与内容与一般的程序设计语言一样;verilog HDL也可以使用函数已是应对不同变量采取同一运算的操作。
verilog HDL函数在综合时被理解成具有独立运算功能的电路,每调用一次函数相当于改变这部分电路的输入以得到相应的计算结果。
模块源代码:module ex3(clk,n,result,reset);output[31:0] result;input[3:0] n;input reset,clk;reg[31:0] result;always @(posedge clk)beginif(!reset)result <= 0;elsebeginresult <= n*factorial(n)/((n*2)+1);endendfunction[31:0] factorial;input[3:0] operand;reg[3:0] index;beginfactorial = operand ? 1:0;for(index = 2;index <= operand;index = index+1) factorial = index*factorial;endendfunctionendmodule`timescale 1ns/100ps`define clk_cycle 50module ex3_t();reg[3:0] n,i;reg reset,clk;wire[31:0] result;initialbeginn=0;reset=1;clk=0;#100 reset=0;#100 reset = 1;for(i=0;i <= 15;i=i+1)begin#200 n=i;end#100 $stop;endalways #`clk_cycle clk =~ clk;ex3 ex30(.clk(clk),.n(n),.result(result),.reset(reset)); always @(negedge clk)$display("at n=%d,result=%d",n,result);endmodule波形图:实验四在verilog HDL中使用任务一实验要求1.掌握任务在结构化verilog HDL设计中的应用2.用测试程序进行波形仿真测试;画出仿真波形3.总结实验步骤和实验结果二实验原理与内容仅有函数并不能满足verilog HDL中的运算需求。
HDL实验报告专业电子科学与技术姓名学号指导老师1 实验一Modelsim仿真软件的使用1.1 实验目的(1)熟悉Modelsim 软件;(2)掌握Modelsim 软件的编译、仿真方法;(3)熟练运用Modelsim 软件进行HDL 程序设计开发。
1.2 实验步骤(1)学习使用Modelsim软件;(2)分析原理及功能;(3)用Verilog HDL编写程序;(4)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。
1.3 实验内容用Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果。
1.4.1 程序module my_xor(ina,inb,out);input ina,inb;output out;assign out=ina^inb;endmodulemodule t_xor;reg ina,inb;wire out;initialbeginina=1'b0;forever #20 ina=~ina;endinitialbegininb=1'b0;forever #10 inb=~inb;endmy_xor tt(.ina(ina),.inb(inb),.out(out));endmodule2 实验二简单组合电路设计2.1 实验目的(1)掌握基于Modelsim 的数字电路设计方法;(2)熟练掌握HDL 程序的不同实现方法2.2 实验步骤(1)分析原理及功能;(2)根据原理用Verilog HDL编写程序;(3)编写测试程序进行仿真;(4)观察波形,分析仿真结果是否正确。
2.3 实验内容设计一个三人表决器(高电平表示通过) ,实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。
使用Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真(要求:至少使用两种方法实现上述实验内容和testbench)。
Verilog实验报告微电子0902班姓名___黄覃_______学号__04094041(04)__一、实验课题1、8选1选择器2、四位比较器二、Verilog程序(主程序+激励)1、8选1选择器module select81(D_In,Cs,OP,D_Out);input [0:7] D_In ;input Cs ;input [0:2] OP ;output D_Out ;reg D_Out ;always @(D_In or OP or Cs)beginif(Cs)begincase (OP)3'b 000: D_Out = D_In[0]; 3'b 001: D_Out = D_In[1]; 3'b 010: D_Out = D_In[2]; 3'b 011: D_Out = D_In[3]; 3'b 100: D_Out = D_In[4]; 3'b 101: D_Out = D_In[5]; 3'b 110: D_Out = D_In[6]; 3'b 111: D_Out = D_In[7]; default D_Out = 1'b 0;endcaseendendendmodule激励:module select81_test;reg [0:7]D_In;tri D_Out;reg Cs;reg [0:2]OP;select81 UUT ( .D_In(D_In), .D_Out(D_Out), .Cs(Cs), .OP(OP)); initialbeginreg [3:0] pal;D_In = 8'b 11001001;for(pal=0; pal<16; pal = pal +1)begin#10;{Cs,OP } = pal;endendendmodule2、四位比较器module compare4(a_gt_b, a_eq_b, a_it_b, in1, in2); input [3:0] in1, in2;output a_gt_b, a_eq_b, a_it_b;reg a_gt_b, a_eq_b, a_it_b;always @(in1 or in2)beginif(in1==in2) a_eq_b=1;else a_eq_b=0;if(in1>in2) a_gt_b=1;else a_gt_b=0;if(in1<in2) a_it_b=1;else a_it_b=0;endendmodule激励:module compare4_test;reg [3:0] a, b;wire a_gt_b, a_eq_b, a_it_b;compare4mycom(.a_gt_b(a_gt_b), .a_eq_b(a_eq_b), .a_it_b(a_it_b), .in1(a), .in2(b));initialbegin#5 a=4'b0100;b=4'b1011;#15 a=4'b0011;b=4'b0101;#20 a=4'b1010;b=4'b0011;#30 a=4'b0101;b=4'b0101;endendmodule三、实验波形图截图1、8选1选择器2、四位比较器四、波形分析及实验心得1、波形分析①4位比较器由波形图可知,当A=0000,B=0000时,故A_DENGYU_B=1,其余输出为0;当A=1010,B=1000时,A_DAYU_B=1,其余输出为0;;当A=0001,B=0111时,A_XIAOYU_B=1,其余输出为0。
一、实验目的通过此设计的编程和下载运行,初步掌握Verilog HDL语言的always 块语句及基本编程结构。
二、实验过程(1)新建工程;通过“file”→“new project wizard…”菜单命令启动新项目向导,利用向导,建立一个新项目。
(2)输入设计程序在file菜单下,单击“new”命名,弹出对话框,选择Verilog HDL File 选项,建立Verilog HDL文件,输入下面程序:module liushuideng(ledout,clk);output[8:0]ledout;input clk;reg[8:0]ledout;reg[23:0]counter;initialledout=8'b11111111;always@(posedge clk)begincounter=counter+1;if(counter==24'b110000000000000000000000)beginledout=ledout<<1;if(ledout==8'b00000000)ledout=8'b11111111;counter=0;endendendmodule(3)指定管脚和设置不用引脚启动pin planner工具,弹出对话框,在“location”列,选择要分配的位置,为每个电路端子都分配适当的脚位。
在Assignments菜单下,单击Device…命令,进入Device & Pin Options对话框,在切换到Unused Pins页,在Reserved all unused pins栏目中,选择As input tri-stated,回到Setting对话框,单击“确定”。
(4)编译在processing菜单下,单击Start Compilation命令,开始编译项目,若编译成功,单击“确定”。
(5)仿真在file菜单下,单击“new”,弹出对话框,切换到other files页。
verilog hdl实验报告《Verilog HDL实验报告》Verilog HDL(硬件描述语言)是一种用于描述电子系统的硬件的语言,它被广泛应用于数字电路设计和硬件描述。
本实验报告将介绍Verilog HDL的基本概念和使用方法,并通过实验展示其在数字电路设计中的应用。
实验目的:1. 了解Verilog HDL的基本语法和结构2. 掌握Verilog HDL的模块化设计方法3. 熟悉Verilog HDL的仿真和综合工具的使用实验内容:1. Verilog HDL的基本语法和结构Verilog HDL是一种硬件描述语言,其语法和结构类似于C语言。
它包括模块定义、端口声明、信号赋值等基本元素。
在本实验中,我们将学习如何定义Verilog模块,并使用端口声明和信号赋值描述数字电路的行为。
2. Verilog HDL的模块化设计方法Verilog HDL支持模块化设计,可以将复杂的电路分解为多个模块,每个模块描述一个子电路的行为。
在本实验中,我们将学习如何设计和实现Verilog模块,并将多个模块组合成一个完整的数字电路。
3. Verilog HDL的仿真和综合工具的使用Verilog HDL可以通过仿真工具进行功能验证,也可以通过综合工具生成实际的硬件电路。
在本实验中,我们将使用Verilog仿真工具对设计的数字电路进行功能验证,并使用综合工具生成对应的硬件电路。
实验步骤:1. 学习Verilog HDL的基本语法和结构2. 设计一个简单的数字电路,并实现Verilog模块描述其行为3. 使用仿真工具对设计的数字电路进行功能验证4. 使用综合工具生成对应的硬件电路实验结果:通过本实验,我们学习了Verilog HDL的基本概念和使用方法,并成功设计和实现了一个简单的数字电路。
我们使用仿真工具对设计的数字电路进行了功能验证,并使用综合工具生成了对应的硬件电路。
实验结果表明,Verilog HDL在数字电路设计中具有重要的应用价值。
《数字系统设计与Verilog HDL》实验报告(二)班级:自动1003班姓名:**学号:********实验二、四位并串转换电路一、实验目的1、了解及掌握时序电路的基本结构常用数字电路;2、通过ModelSim软件编写时序电路的程序进行仿真和调试。
二、实验内容1、熟悉时序电路中时钟的同步与异步用法;2、编写一个四位并串转换设计程序以及测试该模块的测试程序,要求如下:(1)输入一个四位二进制数pin;(2)每个时钟周期按从左往右的顺序输出一位pin的二进制位的数。
三、实验步骤及源程序新建工程及文件,分别添加设计程序及测试程序,进行编译及纠错,编译通过后运行程序仿真进行调试得出结果。
设计模块:module para_to_serial4(pin,clk,reset,sout);input [3:0] pin;input clk,reset;output sout;reg sout;reg [3:0] data;always @(posedge clk or negedge reset)beginif(~reset)beginsout<=1'b0;data<=pin;endelsebegindata<={data[2:0],data[3]};sout<=data[3];endendendmodule测试模块:`timescale 1ns/1nsmodule test_para_to_ser;wire sout;reg [3:0] pin;reg clk,reset;para_to_serial4 test1(pin,clk,reset,sout);initialbeginclk=1'b0;reset=1'b0;#5 reset=1'b1;#300 $stop;endinitialpin=4'b1001;always#5 clk=~clk;endmodule四、实验结果五、实验心得体会这次试验相对于上次有了一定的难度,由于这门课程刚开始学习,我还不能很好地从宏观把握这门课程,对这门课程的认识和理解还不够深刻,所以做实验时遇到了一些困难,虽然找了一些参考资料,有一定的帮助,但最后还是有点纠结,最终在和同学的交流中才比较深刻的对实验有了了解。
西安邮电大学verilog课程实验报告院系:电子工程学院专业班级:电子10班学号:(17)姓名: 2222013年6月8 日实验一门级建模1.实验内容(1)使用nand门编写双输入端的与门,或门及非门my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z=x’y+xy’,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真。
(2)本章中的一位全加器使用乘积项之和的形式可以表示为:Sum=a*b*c_in+a’b*c_in’+a’b’*c_in+a*b’*c_in’C_out=a*b+b*c_in+a*c_in其中a,b和c_in为输入,sum和c_out为输出;只使用与门、或门、非门实现一个一位全加器,写出Verilog描述,限制是每个门最多有四个输入端。
编写激励模块对功能进行检查,并对全部的输入组合进行测试。
2.实验目的(1)掌握门基本类型,并学习Verilog提供的门级原语(2)理解门的实例引用(3)熟悉门级建模的一般步骤(4)熟悉编程软件3.实验步骤(1)先根据题目要求构建my_or,my_and,my_not;其次根据所设计的门来设计my_xor,并且编写激励对所设计的进行验证实验代码及仿真激励代码如下module myxor(out,x,y);output out;input x,y;wire x,y;wire y0,y1,y2,y3;my_not mynot0(y0,x,1);my_not mynot1(y1,y,1);my_and myand0(y2,y,y0);my_and myand1(y3,y1,x);my_or myor0(out,y2,y3);endmodulemodule my_or(out,in0,in1);output out;input in0,in1;wire y0,y1;nand(y0,in0,1);nand(y1,in1,1);nand(out,y0,y1);endmodulemodule my_and(out,in0,in1);output out;input in0,in1;wire y0;nand(y0,in0,in1);nand(out,y0,1);endmodulemodule my_not(out,in0,);output out;input in0;nand (out,in0,1);endmodulemodule stimulus;reg in0,in1;wire OUT;myxor myxor1(OUT,in0,in1);initialbeginin0=0;in1=0;# 1 $display("in0=%b,in1=%b,OUT=%b\n",in0,in1,OUT); in0=0;in1=1;# 1 $display("in0=%b,in1=%b,OUT=%b\n",in0,in1,OUT); in0=1;in1=0;# 1 $display("in0=%b,in1=%b,OUT=%b\n",in0,in1,OUT); in0=1;in1=1;# 1 $display("in0=%b,in1=%b,OUT=%b\n",in0,in1,OUT); endendmodule其仿真结果及波形图如下:(2)实验二的代码如下module fulladd(sum,c_out,a,b,c_in);output sum,c_out;input a,b,c_in;wire y0,y1,y2,y3,y4,y5,y6,y7,y8,y9;not(y0,a);not(y1,b);not(y2,c_in);and (y3,a,b,c_in);and (y4,y0,b,y2);and (y5,y0,y1,c_in);and (y6,a,y2,y1);or(sum,y3,y4,y5,y6);and (y7,a,b);and (y8,b,c_in);and (y9,a,c_in);or(c_out,y7,y8,y9);endmodulemodule stimulus;reg in0,in1,in2;wire sum,c_out;fulladd fulladd1(sum,c_out,in0,in1,in2);initialbeginin0=0;in1=0;in2=0;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);in0=0;in1=0;in2=1;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);in0=0;in1=1;in2=0;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);in0=0;in1=1;in2=1;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);in0=1;in1=0;in2=0;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);in0=1;in1=0;in2=1;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);in0=1;in1=1;in2=0;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);in0=1;in1=1;in2=1;# 1 $display("in0=%b in1=%b in2=%b sum=%b c_out=%b\n",in0,in1,in2,sum,c_out);endendmodule仿真结果及波形如下:4.实验中遇到的问题及解决方法(1)因为是第一次做实验,所以首先得熟悉编程软件modesim的使用的过程中就出现了问题,简单的编程之后进行仿真的时候找不到work文件,最后发觉自己使用软件时出现了错误,在整个过程中要遵循以下流程:新建工程——新建Verilog文件——编程——保存——编译——仿真。
(2)端口定义的时候和后面实例化的过程端口顺序一定要一一对应5.心得体会在该实验中我第一次接触到了Verilog语言的应用,并且基本掌握了modesim的基本应用,第一次实验后,我发觉这样的实验是很重要的,这是课本知识和实际相结合的过程,所以这个非常具有使用价值,从正面来让我们了解和验证我们的思想是否正确。
同时将课本所学知识引用到实验中也用一定的差距,过程中一定要细心才能完成这些,是一种对课本知识的最直接的理解。
实验二数据流建模1.实验内容一个同步计数器可以使用JK触发器来设计。
设计一个同步计数器,其逻辑图和JK触发器的逻辑图已给,清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出;当count_enable信号为低电平时停止计数。
写出同步计数器的Verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出数Q[3:0].2.实验目的(1) 学习连续赋值语句assign的使用,了解对于连续赋值语句的限制以及隐式连续赋值语句。
(2)掌握数据流结构对实际的数字电路建模。
3.实验步骤(1)实验代码如下module counter(Q,clear,clock,count_enable);output [3:0] Q;input clear,clock,count_enable;wire y0,y1,y2;assign y0=Q[0]&count_enable;assign y1=y0&Q[1];assign y2=y1&Q[2];JK_FF jk1(Q[0],clock,clear,count_enable,count_enable);JK_FF jk2(Q[1],clock,clear,y0,y0);JK_FF jk3(Q[2],clock,clear,y1,y1);JK_FF jk4(Q[3],clock,clear,y2,y2);endmodulemodule JK_FF(q,clock,clear,J,K);output q;input clock,clear,J,K;wire a,b,c,abar,ybar,y,d,cbar,qbar;assign cbar=~clock;assign a=~(qbar&J&clock&clear);assign b=~(clock&K&q);assign y=~(a&ybar);assign ybar=~(clear&y&b);assign c=~(y&cbar);assign d=~(cbar&ybar);assign q=~(c&qbar);assign qbar=~(q&clear&d);endmodule//`timescale 1ns/1psmodule stimulus;reg clock,clear,count_enable;wire [3:0] Q;initial$monitor($time,"Q=%bclear=%dclock=%dcount_enable=%d",Q[3:0],clear,clock,count_enable); counter c1(Q,clear,clock,count_enable);initialbeginclear=1'b0;#5 clear=1'b1;endinitialbegincount_enable=1'b1;endinitialbeginclock=1'b0;forever #5 clock=~clock;endendmodule实验结果及波形:4.实验中遇到的问题及解决方法(1)连续赋值语句的左值必须是一个标量或向量线网,或者是标量或向量线网的并接,而不能是向量或向量寄存器。