北航verilog实验报告
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仿真波形:。
FPGA实验报告北航电气技术实验

FPGA电气技术实践实验报告院(系)名称宇航学院专业名称飞行器设计与工程(航天)学生学号XXXXXXXX学生姓名XXXXXX指导教师XXXX2017年11月XX日实验一四位二进制加法计数器与一位半加器的设计实验时间:2017.11.08(周三)晚实验编号20一、实验目的1、熟悉QuartusII的VHDL的文本编程及图形编程流程全过程。
2、掌握简单逻辑电路的设计方法与功能仿真技巧。
3、学习并掌握VHDL语言、语法规则。
4、参照指导书实例实现四位二进制加法计数器及一位半加器的设计。
二、实验原理.略三、实验设备1可编程逻辑实验箱EP3C55F484C8 一台(包含若干LED指示灯,拨码开关等)2计算机及开发软件QuartusII 一台套四、调试步骤1四位二进制加法计数器(1)参照指导书实例1进行工程建立与命名。
(2)VHDL源文件编辑由于实验箱上LED指示灯的显示性质为“高电平灭,低电平亮”,为实现预期显示效果应将原参考程序改写为减法器,且”q1<= q1+1”对应改为”q1<= q1-1”,以实现每输入一个脉冲“亮为1,灭为0”。
由于参考程序中的rst清零输入作用并未实现,所以应将程序主体部分的最外部嵌套关于rst输入是否为1的判断,且当rst为1时,给四位指示灯置数”1111”实现全灭,当rst为0时,运行原计数部分。
(3)参照指导书进行波形仿真与管脚绑定等操作,链接实验箱并生成下载文件(4)将文件下载至实验箱运行,观察计数器工作现象,调试拨动开关查看是否清零。
可以通过改变与PIN_P20(工程中绑定为clk输入的I/O接口)相连导线的另一端所选择的实验箱频率时钟的输出口位置,改变LED灯显示变化频率。
并且对照指导书上对实验箱自带时钟频率的介绍,可以通过改变导线接口转换输入快慢,排查由于clk输入管脚损坏而可能引起的故障。
2一位半加器(1)参照指导书实例1进行工程建立与命名。
(2)图形源文件编辑:由于实验箱上LED指示灯的显示性质为“高电平灭,低电平亮”,为实现预期显示效果应将原电路图中两个输出管脚与非门串联以实现原参考输出“高电平亮,低电平灭”。
verilog实验报告

verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。
它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。
本实验报告将介绍我在学习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实验报告《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实验报告

三、参考资料:
1、ADC0809 模数转换器芯片内部框图:
2、ADC0809 模数转换器控制信号及状态
S0 状态:开始状态
S1 状态:地址锁存,选择模拟输入开关值S2 状态:启动AD 转换状态
S3 状态:等待开始转换状态
S4 状态:等待转换结束状态
S5 状态:允许数据输出状态
S6 状态:读取转换结果
abc_cont源程序:
hex_dec源程序:
原理图:
仿真波形:
实验总结:
结合原理图及仿真波形可知,clk_in为转换器提供工作时序,地址锁存端ale将选定的输入端口数据地址进行锁存,而后数据送入AD转换器,启动转换start,读取eoc的状态,判断是否有上升沿脉冲,若有则表示AD转换结束,由oe数据输出使能端发出允许数据输出脉冲,而后读取数据转换结果。
北航verilog实验报告
北京航空航天大学电子电路设计数字部分实验报告实验一简单组合逻辑设计 (2)实验二简单分频时序逻辑电路的设计 (3)一.实验目的:1.掌握最基本组合逻辑电路的实现方法。
(3)2.学习时序电路测试模块的编写。
(3)3.学习综合和不同层次的仿真。
(3)实验三利用条件语句实现计数分频时序电路 (5)实验四阻塞赋值与非阻塞赋值的区别 (7)实验五用always块实现较复杂的组合逻辑: (10)实验六在Verilog HDL中使用函数 (12)实验七在Verilog HDL中使用任务(task) (14)实验八利用有限状态机进行时序逻辑的设计 (17)实验九楼梯灯 (19)实验思考与总结 (29)学院:学号:姓名:实验一简单组合逻辑设计一.实验目的:1.掌握基本组合逻辑电路的实现方法。
2.初步了解两种基本组合逻辑电路的生成方法。
3.学习测试模块的编写。
4.通过综合和布局布线了解不同层次仿真的物理意义。
二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:描述一个可综合的数据比较器,比较数据a 、b的大小,若相同,则给出结果1,否则给出结果0四.综合仿真结果实验二简单分频时序逻辑电路的设计一.实验目的:1.掌握最基本组合逻辑电路的实现方法。
2.学习时序电路测试模块的编写。
3.学习综合和不同层次的仿真。
二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:用always块和@(posedge clk)或@(negedge clk)的结构表述一个1/2分频器的可综合模型,观察时序仿真结果四.实验代码module half_clk(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;always@(posedge clk_in)beginif(!reset)clk_out=0;elseclk_out=~clk_out;endendmodule`timescale 1ns/100ps`define clk_cycle 50module top;reg clk,reset;wire clk_out;always #`clk_cycle clk=~clk;initialbeginclk=0;reset=-1;#10 reset=0;#110 reset=1;#100000 $stop;endhalf_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out)); endmodule五.综合仿真结果实验三利用条件语句实现计数分频时序电路一.实验目的:1.掌握条件语句在简单时序模块设计中的使用。
北航电气技术实践FPGA报告
FPGA实验报告141717一、实验目的1、熟悉使用可编程逻辑器件--Altera 公司FPGA Cyclone ш系列EP3C55F2、熟悉使用硬件描述语言--VHDL3、熟悉FPGA集成环境--Altera公司FPGA Quartusǁ 9或10开发流程4、熟悉并掌握核心目标系统板与接口电路等工作原理及功能模块绑定新信息5、熟悉并掌握下载线方式和下载文件的选择二、实验要求1、学习并掌握文本编辑、图形编辑等输入和时序、功能仿真方法。
2、学习并掌握门电路、组合电路、时序电路等单一模块功能。
3、学习并设计各种不同状态机逻辑功能的电路。
4、学习并设计有单一模块--较多功能模板集成--系统集成的方法。
5、学习并将系统及成功逐一拆分成一个个子功能模块的方法。
6、学习并选择多种模式显示(发光二极管显示、七段数码管--动态扫描或静态扫描显示、LED点阵显示各种字符和图形或静止或移动等方式、LCD字符液晶显示各种字符和图形或静止或移动、TFT-LCD触摸液晶屏显示各种信息等方式)。
7、根据自己的兴趣和愿望,可从给定的实验题目中选取或自己设定功能题目。
8、同组实验者应轮流操作实例实验流程,并实施源程序编写、编译、调试、下载程序和验证实验结果实践环节。
9、利用元件例化语句调用,至少涉及一个有内容、功能较复杂稍大的主、子程序综合应用例程。
功能内容,关键是看质量。
三、实验设备1、可编程逻辑EDA/SOPC实验箱一台。
2、计算机及开发软件Quartusǁ一台套。
四、实验内容1、按指导书7.6集成开发环境使用章节操作顺序实现文本编程实例1和图形编程实例2全过程。
2、分析并运行指导书5.2综合实例,掌握其编程技巧和输入及输出显示方法。
3、任选门电路、组合电路、时序电路实验各完成一个其逻辑功能,其实现方案自拟定。
在运行FPGA目标器件输入和输出引脚绑定时,输入引脚可绑定高/低电平、单脉冲、各种分频连续脉冲等多种信号,输出引脚可绑定发光二极管、七段数码管、LED 点阵等显示模式。
Verilog 实验报告
Verilog 实验报告一、实验目的本次 Verilog 实验的主要目的是通过实际编写代码和进行仿真,深入理解 Verilog 语言的基本语法、逻辑结构和时序特性,掌握数字电路的设计方法和实现过程,并能够运用Verilog 实现简单的数字逻辑功能。
二、实验环境本次实验使用的软件工具是 Xilinx Vivado 20192,硬件平台是Xilinx Artix-7 开发板。
三、实验内容(一)基本逻辑门的实现1、与门(AND Gate)使用 Verilog 语言实现一个两输入的与门。
代码如下:```verilogmodule and_gate(input a, input b, output out);assign out = a & b;endmodule```通过编写测试激励文件对该模块进行仿真,验证其逻辑功能的正确性。
2、或门(OR Gate)同样实现一个两输入的或门,代码如下:```verilogmodule or_gate(input a, input b, output out);assign out = a | b;endmodule```3、非门(NOT Gate)实现一个单输入的非门:```verilogmodule not_gate(input a, output out);assign out =~a;endmodule```(二)组合逻辑电路的实现1、加法器(Adder)设计一个 4 位的加法器,代码如下:```verilogmodule adder_4bit(input 3:0 a, input 3:0 b, output 4:0 sum);assign sum = a + b;endmodule```2、减法器(Subtractor)实现一个 4 位的减法器:```verilogmodule subtractor_4bit(input 3:0 a, input 3:0 b, output 4:0 diff);assign diff = a b;endmodule```(三)时序逻辑电路的实现1、计数器(Counter)设计一个 4 位的计数器,能够在时钟上升沿进行计数,代码如下:```verilogmodule counter_4bit(input clk, output 3:0 count);reg 3:0 count_reg;always @(posedge clk) begincount_reg <= count_reg + 1;endassign count = count_reg;endmodule```2、移位寄存器(Shift Register)实现一个 4 位的移位寄存器,能够在时钟上升沿进行左移操作:```verilogmodule shift_register_4bit(input clk, input rst, output 3:0 data_out);reg 3:0 data_reg;always @(posedge clk or posedge rst) beginif (rst)data_reg <= 4'b0000;elsedata_reg <={data_reg2:0, 1'b0};endassign data_out = data_reg;endmodule```四、实验结果与分析(一)基本逻辑门的结果通过仿真,与门、或门和非门的输出结果与预期的逻辑功能完全一致,验证了代码的正确性。
北航实验报告封面(共8篇)
北航实验报告封面(共8篇)北航惯性导航综合实验一实验报告实验一陀螺仪关键参数测试与分析实验加速度计关键参数测试与分析实验二零一三年五月十二日实验一陀螺仪关键参数测试与分析实验一、实验目的通过在速率转台上的测试实验,增强动手能力和对惯性测试设备的感性认识;通过对陀螺仪测试数据的分析,对陀螺漂移等参数的物理意义有清晰的认识,同时为在实际工程中应用陀螺仪和对陀螺仪进行误差建模与补偿奠定基础。
二、实验内容利用单轴速率转台,进行陀螺仪标度因数测试、零偏测试、零偏重复性测试、零漂测试实验和陀螺仪标度因数与零偏建模、误差补偿实验。
三、实验系统组成单轴速率转台、MEMS 陀螺仪(或光纤陀螺仪)、稳压电源、数据采集系统与分析系统。
四、实验原理1. 陀螺仪原理陀螺仪是角速率传感器,用来测量载体相对惯性空间的角速度,通常输出与角速率对应的电压信号。
也有的陀螺输出频率信号(如激光陀螺)和数字信号(把模拟电压数字化)。
以电压表示的陀螺输出信号可表示为:UGUG?0??kG??kGfG(a)?kG?G(1-1)式中fG(a)是与比力有关的陀螺输出误差项,反映了陀螺输出受比力的影响,本实验不考虑此项误差。
因此,式(1-1)简化为 UGUG?0??kG??kG?G(1-2)由(1-2)式得陀螺输出值所对应的角速度测量值:测量?UG?UG(0)(1-3) ??GkG对于数字输出的陀螺仪,传感器内部已经利用标度因数对陀螺仪模拟输出进行了量化,直接输出角速度值,即:测量??0??真值??G(1-4)?0是是陀螺仪的零偏,物理意义是输入角速度为零时,陀螺仪输出值所对应的角速度。
且UG(0)?kG?0 (1-5)?测量精度受陀螺仪标度因数kG、随机漂移?G、陀螺输出信号UG的检测精度和UG(0)的影响。
通常kG和UG(0)表现为有规律性,可通过建模与补偿方法消除,?G表现为随机特性,可通过信号滤波方法抵制。
因此,准确标定kG和UG(0)是实现角速度准确测量的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京航空航天大学电子电路设计数字部分实验报告实验一简单组合逻辑设计 (2)实验二简单分频时序逻辑电路的设计 (3)一.实验目的:1.掌握最基本组合逻辑电路的实现方法。
(3)2.学习时序电路测试模块的编写。
(3)3.学习综合和不同层次的仿真。
(3)实验三利用条件语句实现计数分频时序电路 (5)实验四阻塞赋值与非阻塞赋值的区别 (7)实验五用always块实现较复杂的组合逻辑: (10)实验六在Verilog HDL中使用函数 (12)实验七在Verilog HDL中使用任务(task) (14)实验八利用有限状态机进行时序逻辑的设计 (17)实验九楼梯灯 (19)实验思考与总结 (29)学院:学号:姓名:实验一简单组合逻辑设计一.实验目的:1.掌握基本组合逻辑电路的实现方法。
2.初步了解两种基本组合逻辑电路的生成方法。
3.学习测试模块的编写。
4.通过综合和布局布线了解不同层次仿真的物理意义。
二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:描述一个可综合的数据比较器,比较数据a 、b的大小,若相同,则给出结果1,否则给出结果0四.综合仿真结果实验二简单分频时序逻辑电路的设计一.实验目的:1.掌握最基本组合逻辑电路的实现方法。
2.学习时序电路测试模块的编写。
3.学习综合和不同层次的仿真。
二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:用always块和@(posedge clk)或@(negedge clk)的结构表述一个1/2分频器的可综合模型,观察时序仿真结果四.实验代码module half_clk(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;always@(posedge clk_in)beginif(!reset)clk_out=0;elseclk_out=~clk_out;endendmodule`timescale 1ns/100ps`define clk_cycle 50module top;reg clk,reset;wire clk_out;always #`clk_cycle clk=~clk;initialbeginclk=0;reset=-1;#10 reset=0;#110 reset=1;#100000 $stop;endhalf_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out)); endmodule五.综合仿真结果实验三利用条件语句实现计数分频时序电路一.实验目的:1.掌握条件语句在简单时序模块设计中的使用。
2.学习在Verilog模块中应用计数器。
3.学习测试模块的编写、综合和不同层次的仿真。
二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:仿真一个可综合风格的分频器,将10MB的时钟分频为500KB的时钟,定义一个计数器,原理同1/2分频器一样,只不过分频变为1/20。
四.实验代码module fdivision(RESET,F10M,F500K);input RESET,F10M;output F500K;reg F500K;reg[7:0]j;always @(posedge F10M)if(!RESET)beginF500K <= 0;j<=0;endelsebeginif(j==9)beginj<=0;F500K =~ F500K;endelsej<=j+1;endendmodule`timescale 1ns/1ps`define clk_cycle 50module division_Top;reg F10M,RESET;wire F500K_clk;always #`clk_cycle F10M=~F10M;initialbeginRESET=1;F10M=0;#100 RESET=0;#100 RESET=1;#10000 $stop;endfdivision fdivision(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk)); endmodule五.综合仿真结果实验四阻塞赋值与非阻塞赋值的区别一.实验目的:1.通过实验,掌握阻塞赋值与非阻塞赋值的概念和区别。
2.了解非阻塞和阻塞赋值的不同使用场合。
3.学习测试模块的编写、综合和不同层次的仿真。
二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:两个模块,一个阻塞赋值,一个非阻塞赋值,观察两者之间的区别四.实验代码module blocking(clk,a,b,c);output [3:0]b,c;input [3:0]a;input clk;reg [3:0]b,c;always @(posedge clk)beginb=a;c=b;$display("Blocking:a=%d,b=%d,c=%d",a,b,c);endendmodule//non_blocking.vmodule non_blocking(clk,a,b,c);output [3:0]b,c;input [3:0]a;input clk;reg [3:0]b,c;always @(posedge clk)beginb<=a;c<=b;$display("Non_Blocking:a=%d,b=%d,c=%d",a,b,c);endendmodule//comepareTop.v`timescale 1ns/100psmodule conpareTop;wire[3:0]b1,c1,b2,c2;reg[3:0]a;reg clk;initialbeginclk=0;forever #50 clk=~clk;endinitialbegina=4'h3;$display("___________");#100 a=4'h7;$display("___________");#100 a=4'hf;$display("___________");#100 a=4'ha;$display("___________");#100 a=4'h2;$display("___________");#100 $display("___________");$stop;endnon_blocking non_blocking(clk,a,b2,c2);blocking blocking(clk,a,b1,c1); endmodule五.综合仿真结果实验五用always块实现较复杂的组合逻辑:一.实验目的:1.掌握用always实现较大组合逻辑电路的方法。
2.进一步了解assign与always两种组合电路实现方法的区别和注意点。
3.学习测试模块中随机数的产生和应用。
4.学习综合不同层次的仿真,并比较结果二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:设计一个简单的指令译码电路,该电路通过对指令的判断,对输入数据执行相应的操作,包括加、减、与、或和求反,并且无论是指令作用的数据还是指令本身发生变化,都有要作出及时的反应。
四.实验代码`define plus 3'd0`define minus 3'd1`define band 3'd2`define bor 3'd3`define unegate 3'd4module alu(out,opcode,a,b);output [7:0]out;reg [7:0]out;input [2:0]opcode;input [7:0]a,b;always @(opcode or a or b)begincase(opcode)`plus: out=a+b;`minus: out=a-b;`band: out=a&b;`bor: out=a|b;`unegate: out=~a;default: out=8'hx;endcaseendendmodule`timescale 1ns/1nsmodule alutest;wire [7:0]out;reg [7:0]a,b;reg [2:0]opcode;parameter times=5;initialbegina={$random}%256;b={$random}%256;opcode=3'h0;repeat(times)begin#100 a={$random}%256;b={$random}%256;opcode=opcode+1;end#100 $stop;endalu alu1(out,opcode,a,b); endmodule五.综合仿真结果实验六在Verilog HDL中使用函数一.实验目的:1.了解函数的定义和在模块设计中的使用。
2.了解函数的可综合性问题。
3.了解许多综合器不能综合复杂的算术运算。
二.实验设备:安装Modelsim-6.5c的PC机。
三.实验内容:做一个函数调用的示例,采用同步时钟触发运算的执行,每个clk时钟周期执行一次运算,在测试模块中,调用系统任务$display及在时钟的下降沿显示每次运算的结果。
四.实验代码module tryfunct(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 tryfunctTop;reg [3:0]n,i;reg reset,clk;wire [31:0]result;initialbeginclk=0;n=0;reset=1;#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;tryfunct m(.clk(clk),.n(n),.result(result),.reset(reset)); endmodule五.综合仿真结果练习题仿真结果实验七在Verilog HDL中使用任务(task)一.实验目的:1.掌握任务在Verilog模块设计中的应用。