西安邮电大学verilog HDL 实验报告

合集下载

VerilogHDL实验报告

VerilogHDL实验报告

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硬件描述语言实验报告

Verilog HDL硬件描述语言实验报告

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 HDL 实验报告

Verilog HDL 实验报告

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实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。

它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。

本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。

实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。

通过使用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中的运算需求。

Verilog-HDL实验报告

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课题报告

verilog HDL课题报告

一、实验目的通过此设计的编程和下载运行,初步掌握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实验报告》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实验报告(二)

数字系统设计与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四、实验结果五、实验心得体会这次试验相对于上次有了一定的难度,由于这门课程刚开始学习,我还不能很好地从宏观把握这门课程,对这门课程的认识和理解还不够深刻,所以做实验时遇到了一些困难,虽然找了一些参考资料,有一定的帮助,但最后还是有点纠结,最终在和同学的交流中才比较深刻的对实验有了了解。

HDL实验报告

HDL实验报告

HDL实验报告专业:学号:姓名:指导老师:目录实验一:modelsim软件使用 (3)实验二:简单组合电路设计 (5)实验三:二进制全加器设计 (7)实验四:二进制计数器设计 (12)实验五:基本IO口硬件实现 (16)实验一Modelsim 仿真软件的使用一、实验目的(1)熟悉Modelsim 软件;(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验步骤(1)学习,练习使用Modelsim软件(2)用 Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果三、实验结果1.程序:module yihuo(a,b,c);input a,b;output c;assign c=a^b;endmodule测试文件:module t_yihuo;reg a,b;wire c;initialbegina=1’b0;b=1’b0;#20 a=1’b1;b=1’b0;#20 a=1’b0;b=1’b1;#20 a=1’b1;b=1’b1;endyihuo u1(a,b,c);endmodule仿真波形:四、心得1、编程时候要注意不能少了句子末尾的分号;2、initial后面不能有分号;3、程序第一行后面得加上分号,但是末尾不需要。

实验二简单组合电路设计一、实验目的(1)掌握基于Modelsim 的数字电路设计方法;(2)熟练掌握HDL 程序的不同实现方法二、实验内容设计一个三人表决器(高电平表示通过),实验内容如下:(1)三个人,一个主裁判,两个副裁判;(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。

使用 Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真(要求:至少使用两种方法实现上述实验内容和testbench)。

三、实验结果程序1module one (ina,inb,inc,outc);input ina,inb,inc;output outc;reg outc;always @(ina or inb or inc)outc=ina|inb&inc;endmodule程序2module one (ina,inb,inc,outc);input ina,inb,inc;output outc;asign outc=ina|inb&inc;endmodule测试文件:module t_biaojue;reg a,b,c;wire y;initialbegina=1'b0;forever #10 a=~a;endinitialbeginb=1'b0;forever #20 b=~b;endinitialbeginc=1'b0;forever #40 c=~c;endone t(a,b,c,y);endmodule仿真波形如下:实验心得:第一次独立使用modelsim软件,从一开始的生疏,到做完实验后慢慢地了解如何使用这个软件,并自己做出了基本的仿真,通过仿真验证程序的对与错。

西安邮电大学自动化verilog实验报告程序

西安邮电大学自动化verilog实验报告程序

八路彩灯实验程序module led8(clk,reset,led);input clk,reset;output [7:0] led;reg [7:0] led;reg [5:0] state;reg nbit;always @(posedge clk or negedge reset) beginif(~reset)state<=6;d0;elsestate<=state==6'd32?6;d0:state+6'd1; endalways @(negedge reset or posedge clk) beginif(~reset)led<=8'h7f;else if(state==6'd24)led<= 8'h01;else if(state==6'd32)led<=8'h7f;elseled<= {led[6:0],nbit};endalways @(negedge reset or posedge clk) beginif(~reset)nbit<=1'b0;else if(state>=6'd0 && state<6'd8 ) nbit<=1'b1;else if(state>=6'd8 && state<6'd16) nbit<=1'b0;else if(state>=6'd16 && state<6'd24) nbit<=1'b1;else if(state>=6'd24 && state<6'd31) nbit<=1'b0;else if(state==6'd31)nbit<=1'b1;else if(state==6'd32)nbit<=1'b0;endendmodule`timescale 1ns/1nsmodule testbench;module led_tb(clk,n_reset,led); output clk;output reset;output [7:0] led;reg clk;reg reset;led8 led_inst(clk,reset,led); initialbeginreset=1'b1;#20 reset=1'b0;#60 reset=1'b1;endinitialbeginclk=1'b0;forever#10 clk=~clk;endendmodule串并转换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];endendmodule`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;#5 clk=~clk;Endmodule比较器:modulecompare4(LA_out,EQ_out,LE_out,a,b,LA_in,EQ_in,LE_in );output LA_out,EQ_out,LE_out;input [3:0] a,b;input LA_in,EQ_in,LE_in;reg LA_out,EQ_out,LE_out;always @(b)beginif(a>b)beginLA_out=1'b1;EQ_out=1'b0;LE_out=1'b0;endelae if(a<b)beginEQ_out=1'b0;LE_out=1'b1;endelsebeginif({LA_in,EQ_in,LE_in}==3'b100) beginLA_out=1'b1;EQ_out=1'b0;LE_out=1'b0;endelse if({LA_in,EQ_in,LE_in}==3'b001) beginLA_out=1'b0;EQ_out=1'b0;LE_out=1'b1;endelse if({LA_in,EQ_in,LE_in}==3'b010) beginLA_out=1'b0;EQ_out=1'b1;endendendendmodule`timescale 10ns/1nsmodule compare_top;wire LA_out,EQ_out,LE_out;reg [3:0] a,b;reg LA_in,EQ_in,LE_in;integer i,j;compare4cmp1(LA_out,EQ_out,LE_out,a,b,LA_in,EQ_in,LE_in); initialbegina<=4'd0;b<=4'd1;LA_out=1'b0;EQ_out=1'b0;LE_out=1'b0;endalwaybegin#5 {LA_in,EQ_in,LE_in}==3'b100;#5 {LA_in,EQ_in,LE_in}==3'b001;#5 {LA_in,EQ_in,LE_in}==3'b010; endinitialbeginfor(i=0;i<16;i=i+1)for(j=0;j<16;j=j+1)begin#5 a=i;b=j;endendendmodule自动售饮料机:moduleauto_seller(clk,rst,dis_mony,dis_price,btn_ok,btn_mon,btn_sell,led_warn,led,beep);input clk,rst,btn_ok;input [2:0] btn_mon;//选择放入的钱input [3:0] btn_sell;//选择商品bbt_5,gz_10,kqs_15,kl_20 output [3:0] led;//led_5,led_10,led_15,led_20output led_warn;//钱不足,指示灯output [11:0] dis_mony;//数码管显示投入面值,dia_mony[10:7]=com位选,dis_mony[7:0]=段码output [11:0] dis_price;//数码管显示价钱output beep;reg clk_500Hz;reg [3:0] led;//led_5,led_10,led_15,led_20reg led_warn;//警告放入钱不足reg [11:0] dis_mony;reg [11:0] dis_price;reg [31:0] counter;reg [9:0] price,price_all;reg [1:0] flag = 2'b00;//数码管显示标志位reg beep=0;parameter COUNT1 = 25'd10000;/*分频使数码管显示稳定*/always @ (posedge clk)beginif(counter== 0)begincounter <= COUNT1;clk_500Hz <= ~clk_500Hz;endelsecounter <= counter-1;endalways @(negedge rst or posedge clk)beginif(!rst)beginled = 4'b0000;//LED灭price_all = 0;//价格清零led_warn = 0;price = 0;beep = 0;endelsebegin/*三种面值共8种组合*/case(btn_mon)3'b001:begin price_all = 5;end 3'b010:begin price_all = 10;end 3'b100:begin price_all = 50;end 3'b011:begin price_all = 15;end 3'b101:begin price_all = 55;end 3'b110:begin price_all = 60;end 3'b111:begin price_all = 65;end default:begin price_all = 0;endendcasecase(btn_sell)4'b0001:begin price = 5;end4'b0010:begin price = 10;end4'b0100:begin price = 15;end4'b1000:begin price = 20;enddefault:begin price = 0;endendcaseif(btn_ok == 1)beginif(price_all < price) //放入钱不足beginled_warn = 1;price = 0;endelsebegin //金钱足够price_all = price_all-price;beep = 1;case(price) //LED灯显示货物卖出5: begin led = 4'b0001;end10:begin led = 4'b0010;end15:begin led = 4'b0100;end20:begin led = 4'b1000;endendcaseendendelsebeep = 0;endend/*分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格*/always @(posedge clk_500Hz)begincase(flag)2'b00:begindis_mony <= {4'b1110,led7(price_all%10),1'b1};dis_price <= {4'b1110,led7(price%10),1'b1};flag = 2'b01;end2'b01:begindis_mony <= {4'b1101,led7(price_all/10),1'b0}; dis_price <= {4'b1101,led7(price/10),1'b0};flag = 2'b00;endendcaseend/*数码管段码表*/function [6:0] led7;input [3:0] dis_input;begincase (dis_input)0 : led7 = ~7'b111_1110;1 : led7 = ~7'b011_0000;2 : led7 = ~7'b110_1101;3 : led7 = ~7'b111_1001;4 : led7 = ~7'b011_0011;5 : led7 = ~7'b101_1011;6 : led7 = ~7'b101_1111;7 : led7 = ~7'b111_0000;8 : led7 = ~7'b111_1111;9 : led7 = ~7'b111_0011;default : led7 = ~7'b111_1111;endcaseend endfunction endmodule。

verilog课程设计实验报告

verilog课程设计实验报告

verilog课程设计实验报告一、教学目标本课程旨在通过Verilog硬件描述语言的学习,让学生掌握数字电路设计的自动化工具,理解并实践硬件描述语言在数字系统设计中的应用。

通过本课程的学习,学生应达到以下目标:1.知识目标:–理解Verilog的基本语法和结构。

–掌握Verilog中的模块化设计方法。

–学习常用的Verilog描述技巧,包括逻辑门级建模、行为级建模和结构级建模。

2.技能目标:–能够运用Verilog语言进行简单的数字电路设计。

–学会使用至少一种Verilog仿真工具进行电路功能验证。

–能够阅读和理解Verilog代码,进行简单的代码优化。

3.情感态度价值观目标:–培养学生的团队合作意识,在实验报告中能够体现分工合作的精神。

–培养学生的问题解决能力,鼓励学生在遇到问题时积极寻找解决方案。

–培养学生对新技术的好奇心和学习兴趣,激发他们对电子工程领域的热爱。

二、教学内容依据教学目标,本课程的教学内容将围绕Verilog语言的基础知识、实践应用和项目设计展开。

教学大纲安排如下:1.第一部分:Verilog基础知识(2周)–介绍Verilog的背景和基本概念。

–详细讲解Verilog的数据类型、运算符和语句。

2.第二部分:模块化设计(2周)–讲解模块的定义和封装。

–实践模块的端口声明和模块实例化。

3.第三部分:数字电路的Verilog描述(2周)–通过实例教学,掌握逻辑门、触发器等基本组件的Verilog建模。

–学习组合逻辑和时序逻辑的设计方法。

4.第四部分:仿真与测试(1周)–学习使用仿真工具进行电路功能验证。

–理解并实践测试台(testbench)的编写。

5.第五部分:项目设计(3周)–小组合作完成一个较为复杂的数字系统设计项目。

–包括系统模块的划分、编码、仿真和测试。

三、教学方法为了提高学生的学习效果,将采用多种教学方法相结合的方式进行授课:1.讲授法:用于讲解Verilog的基本概念和语法。

Verilog实验报告(电子)

Verilog实验报告(电子)

西安邮电大学Verilog HDL大作业报告书学院名称:电子工程学院学生姓名:专业名称:电子信息工程班级:实验一异或门设计一、实验目的(1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z=x’y+xy’,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真1、实验要求用Verilog HDL 程序实现一个异或门,Modelism仿真,观察效果。

2、步骤1、建立工程2、添加文件到工程3、编译文件4、查看编译后的设计单元5、将信号加入波形窗口6、运行仿真实验描述如下:module my_and(a_out,a1,a2);output a_out;input a1,a2;wire s1;nand(s1,a1,a2);nand(a_out,s1,1'b1);endmodulemodule my_not(n_out,b);output n_out;input b;nand(n_out,b,1'b1); endmodulemodule my_or(o_out,c1,c2);output o_out;input c1,c2;wire s1,s2;nand(s1,c1,1'b1);nand(s2,c2,1'b1);nand(o_out,s1,s2); endmodulemodule MY_XOR(z,x,y);output z;input x,y;wire a1,a2,n1,n2;my_not STEP01(n1,x);my_not STEP02(n2,y);my_and STEP03(a1,n1,y);my_and STEP04(a2,n2,x);my_or STEP05(z,a1,a2); Endmodulemodule stimulus;reg X,Y;wire OUTPUT;MY_XOR xor01(OUTPUT,X,Y);initialbegin$monitor($time,"X=%b,Y=%b --- OUTPUT=%b\n",X,Y,OUTPUT);endinitialbeginX = 1'b0; Y = 1'b0;#5 X = 1'b1; Y = 1'b0;#5 X = 1'b1; Y = 1'b1;#5 X = 1'b0; Y = 1'b1;endendmodule二、实验结果波形图:三、分析和心得通过这次的实验,我基本熟悉Modelsim 软件,掌握了Modelsim 软件的编译、仿真方法。

HDL第二次实验实验报告

HDL第二次实验实验报告

实验报告专业:测控1301 姓名:刘钰辉 学号:3130103162 日期:3月31日 课程名称: HDL 语言 指导老师: 成绩:________________ 实验名称:一、实验目的 1、在testbench 中加入打印输出,可用$monitor 或者$display ,参考上次次实验2、为方便观察结果,写入某地址的数据内容可以与地址addr 存在一定关系,如地址为8’d8的空间写32’d8。

3、读写均无效时输出为高阻态,应该使用三态门。

二、实验原理(如果有请放状态图/流程图)三、Verilog代码以及仿真结果module top_ram;wire clk;wire rst;wire wr_en;wire rd_en;wire [7:0] addr;wire [31:0] data;ram inst_ram(.clk_i(clk),.rst_i(rst),.wr_en_i(wr_en),.rd_en_i(rd_en),.addr_i(addr),.data_io(data));tb_ram inst_tb_ram(.clk_o(clk),.rst_o(rst),.wr_en_o(wr_en),.rd_en_o(rd_en),.addr_o(addr),.data_io(data));endmodulemodule ram(input clk_i,input rst_i,input wr_en_i,input rd_en_i,input [7:0] addr_i,inout [31:0] data_io);reg [31:0] bram[255:0];reg [31:0] rd_o;reg t; assign data_io=t?rd_o:32'hz;integer i;always @(posedge clk_i)beginif(rst_i)beginfor(i=0;i<=255;i=i+1)bram[i]<=32'h0;endelse if(wr_en_i)bram[addr_i]<=data_io;else if(rd_en_i)rd_o<=bram[addr_i];endalways @(posedge clk_i)beginif(rd_en_i)t<=1'h1;elset<=1'h0;endendmodulemodule tb_ram(output reg clk_o,output reg rst_o,output reg wr_en_o,output reg rd_en_o,output reg [7:0] addr_o,inout [31:0] data_io);reg [31:0] data;assign data_io=wr_en_o?data:32'hz;initial begin$monitor($time,"addr_o=%x,data_io=%x,wr_en_o=%x,rd_en_o=%x",addr_o,data_io,wr_en _o,rd_en_o);clk_o=1'b0;rst_o=1'b1;wr_en_o=1'b0;rd_en_o=1'b0;addr_o=8'b0;data=32'h0;#100;rst_o=1'b0;write(8'h02,32'h23);write(8'h03,32'h53);write(8'h11,32'h10);read(8'h02);read(8'h03);read(8'h11);#100;rst_o=1'b1;#100;rst_o=1'b0;endalways#5 clk_o=~clk_o;task write(input[7:0] a_i,input[31:0] b_i);begin#100;@(posedge clk_o);addr_o=a_i;data=b_i;wr_en_o=1'b1;@(posedge clk_o);wr_en_o=1'b0;endendtasktask read(input[7:0] addr );begin#100;@(posedge clk_o);addr_o=addr;rd_en_o=1'b1;@(posedge clk_o);rd_en_o=1'b0;endendtaskendmodule四、思考题没有思考题五、心得体会(选做)这次试验比较难,代码一开始时没有什么思路,我是根据由网上的资料参考修改而来的。

数电编程实验报告

数电编程实验报告

实验名称:基于Verilog HDL的数字频率计设计实验日期:2023年11月1日实验目的:1. 掌握Verilog HDL编程语言的基本语法和编程技巧。

2. 理解数字频率计的工作原理和设计方法。

3. 培养团队合作和问题解决能力。

实验内容:本次实验要求设计一个基于Verilog HDL的数字频率计,能够测量输入信号的频率,并将结果显示在数码管上。

实验原理:数字频率计的基本原理是利用计数器对输入信号的周期进行计数,然后通过计算得到频率。

具体步骤如下:1. 使用一个时钟信号作为计数器的时钟输入。

2. 计数器在时钟信号的作用下对输入信号的周期进行计数。

3. 当计数器达到预设的值时,停止计数,并计算出频率。

4. 将计算出的频率显示在数码管上。

实验步骤:1. 环境搭建:在Quartus II软件中创建一个新的工程,并添加Verilog HDL源文件。

2. 模块设计:设计一个名为`frequency_counter`的模块,该模块包含以下功能:- 输入信号:时钟信号`clk`、复位信号`reset`、输入信号`signal`。

- 输出信号:计数器输出`count`、频率输出`frequency`。

- 功能:对输入信号的周期进行计数,并计算出频率。

3. 数码管驱动模块设计:设计一个名为`segment_display`的模块,该模块包含以下功能:- 输入信号:计数器输出`count`、数码管段选信号`seg`。

- 输出信号:数码管显示信号`display`。

- 功能:将计数器输出转换为数码管显示信号。

4. 顶层模块设计:设计一个名为`top`的顶层模块,该模块包含以下功能:- 输入信号:时钟信号`clk`、复位信号`reset`、输入信号`signal`。

- 输出信号:数码管显示信号`display`。

- 功能:调用`frequency_counter`和`segment_display`模块,实现数字频率计的功能。

VerilogHDL基础实验可编程实验报告

VerilogHDL基础实验可编程实验报告

可编程逻辑器件设计实验报告实验名称:第二部分:VerilogHDL基础实验实验目的:掌握Quartus II 软件的基本使用方法,完成基本时序电路设计实验时间: 2014 年 06 月 19 日地点: 803实验室学生姓名:学号:实验名称:简单D触发器实验一简单D触发器1、实验步骤(1)创建工程启动New Project Wizard,创建一个工程。

(2)创建文件选择菜单File—>New—>Verilog HDL File,创建一个Verilog HDL文件,在Verilog HDL文件中编写能够完成实验功能的Verilog HDL代码。

(3)编译工程选择菜单Processing —>Start Compilation,或者单击按钮。

(4)观察RTL视图选择菜单Tools—>Netlist Viewers—>RTL Viewer即可生成RTL视图。

(5)仿真1).创建VWF文件选择菜单File—>New—>Vector Waveform File2). 设定“End Time”选择菜单Edit File—> End Time,在弹出的对话框中将Time设置为20us。

3).在VWF文件中输入信号节点选择菜单View—>Utility Windows—>Node Finder,在出现的对话框中将Filter框中设置为Pins:all,再单击List按钮,从端口列表中选择需要观察的并拖到波形编辑窗口中。

4).编辑输入信号波形5).观察仿真结果选择菜单Processing—>Start Simulation,或者单击按钮,观察输出波形。

2. VerilogHDL代码module _DFF (clk,d,q);input clk,d;output q;reg q;always@ (posedge clk)beginq<=d;endendmodule3. RTL 视图4.仿真波形实验二同步置数的D触发器1.实验步骤(1)创建工程启动New Project Wizard,创建一个工程。

Verilog HDL《实验一Modelsim的使用》实验报告

Verilog HDL《实验一Modelsim的使用》实验报告

一、实验目的:1. 熟悉并掌握Modelsim仿真工具的使用方法;2. 初步了解Verilog HDL描述简单数字电路的方法;3. 学习用Verilog HDL编写测试模块。

二、实验设备:1. PC机一台2. Sword实验平台三、实验任务:1. 实现课本P30例2.3-8的2选1数据选择器,并编写测试文件进行功能仿真,观察输出波形。

2. 实现课本P32例2.4-1的D触发器,并编写测试模块,进行仿真。

3. 根据例2.3-8,试着设计4选1的数据选择器电路,并编写测试模块,进行仿真。

四、实验原理:2选1数据选择器:若该数据选择器的sel端为不定态x,则out由in1和in2按位运算的结果得出。

若in1=4’b0011,in2=4’b0101,则out=4’b0xx1。

当sel为低电平0时,out等于in1,反之为in2。

五、实验步骤:三个题的实验步骤一样,这里以第一题为例:1. 新建一个工程,取名为mux21。

2.在mux21工程中新建一个Verilog文件,取名为mux21。

3.打开mux21.v文件,编写程序源代码。

4.编译源程序。

5.在mux21工程中再新建一个测试文件,取名为mux21_tb。

6.打开mux21_tb.v文件,编写测试程序源代码。

7.编译测试程序。

8.进行仿真,观察波形六、实验结果:2选1数据选择器modelsim功能仿真图:当sel信号为低电平0时,数据选择器选择in1信号,所以out输出信号与in1信号一致,当sel信号为高电平1时,数据选择器选择in2信号,所以out输出信号与in2信号一致。

D触发器modelsim功能仿真图:D触发器:仿真刚开始时,clk时钟信号的上升沿未到来,out为不定态。

当时钟信号的上升沿到来时,out端输出in信号,因此在每一个上升沿到来时,out的值变为in并保持到下一个上升沿时刻到来后作出变化。

4选1数据选择器modelsim功能仿真图:当选择信号为00时,输出信号与in0一致;当选择信号为01时,输出信号与in1一致;当选择信号为10时,输出信号与in2一致;当选择信号为11时,输出信号与in3一致。

Verilog HDL高级数字设计实验报告

Verilog HDL高级数字设计实验报告

Verilog HDL高级数字设计实验报告题目:“俄罗斯方块”FPGA实现实验目的通过此次项目,完成以下目的:1)熟悉Xilinx FPGA的架构及开发流程2)设计一个功能完整的系统,掌握FSM + Datapath的设计方法。

实验内容1.项目介绍本项目主要在FPGA上实现了一个经典小游戏“俄罗斯方块”。

本项目基本解决方案是,使用Xilinx Zynq系列开发板ZedBoard作为平台,实现主控模块,通过VGA接口来控制屏幕进行显示。

2.系统框架整个系统由四部分组成,按键输入处理模块、控制模块、数据路径模块以及VGA显示接口模块。

整个系统的结构如下图所示:图1:系统框图下面分别对四个模块进行介绍:1)按键输入处理模块按键处理模块的主要功能是对输入系统的up,down,left,right四个控制信号进行消抖处理,并对其进行上升沿检测。

消抖模块采用上课所提出的结构,采用了一个4位的移位寄存器,先将输入信号延迟4个时钟周期,再对其以一个较低的时钟频率进行采用。

消抖模块的结构如下图所示:图2:消抖模块结构示意图为了简化控制系统,在本系统的设计过程中,不考虑长时间按键产生连按效果。

因而,需要对按键进行上升沿检测。

上升沿检测的基本实现方案是加入一组寄存器,对前一个的按键信号进行暂存,将暂存的值与当前值进行比较,当上一个值为0而当前值为1时,即认为其检测到了一个上升沿。

2)控制模块控制模块采用FSM的方式进行控制。

在控制模块中,定义了10个状态:S_idle:上电复位后进入的空状态,当start信号为1时进入S_new状态S_new:用于产生新的俄罗斯方块。

S_hold:保持状态。

在这个状态中进行计时,当时间到达一定间隔时,转到S_down 状态;或者等待输入信号(up,down,left,right)时,转到S_down(按键为down)或者S_move(up,left,right)状态。

S_down:判断当前俄罗斯块能否下移一格。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安邮电大学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)连续赋值语句的左值必须是一个标量或向量线网,或者是标量或向量线网的并接,而不能是向量或向量寄存器。

相关文档
最新文档