Verilog实验报告(电子)
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期末实验报告―波形发生器

Verilog期末实验报告―波形发生器深圳大学实验报告课程名称: Verilog使用及其应用实验名称: 频率可变的任意波形发生器学院: 电子科学与技术学院专业:电子科学与技术班级: 2组号: 指导教师: 刘春平报告人: 陈昊学号: 2007160162 实验地点科技楼B115一、实验目的应用Verilog进行编写四种波形发生的程序,并结合DE2板与DVCC实验板上的D/A转换器在示波器显示出波形。
初步了解Verilog的编程及DE2板的应用,加强对其的实际应用操作能力。
二、实验原理实验程序分为三部分:第一、通过计数器实现内置信号分频,并通过外置开关调节频率来控制输出波形的频率。
第二、设定ROM中的数值,将波形数据存储到ROM中。
第三、设定波形选择开关。
总体设计方案及其原理说明:FPGA图 1-1 系统总体设计方案DDS是一种把数字信号通过数/模转换器转换成模拟信号的合成技术。
它由相位累加器、相幅转换函数表、D/A转换器以及内部时序控制产生器等电路组成。
参考频率f_clk为整个合成器的工作频率,输入的频率字保存在频率寄存器中,经,位相位累加器,累加一次,相位步进增加,经过内部ROM波形表得到相应的幅度值,经过D/A转换和低通滤波器得到合成的波形。
p为频率字,即相位增量;参考频率为,_clk;相位累加器的长度为,位,输出频率,_out为:f_out——输出信号的频率; N————相位累加器的位数;p———频率控制字(步长); f_clk——基准时钟频率。
图1-2 四种波形单周期的取样示意图段地址基地址 D7 D6 D5 D4 D3 D2 D1 D000 000 1000 001 1700 010 1500 011 1700 100 1000 101 300 110 500 111 301 000 301 001 301 010 301 011 301 100 101 101 101 110 101 111 110 000 010 001 510 010 1010 011 1510 100 2010 101 2510 110 3010 111 3511 000 3511 001 3011 010 2511 011 2011 100 1511 101 1011 110 511 111 0图1-3 函数查找表的设计三、实验内容程序编码:module dds(f_clk,p,choose,data);//端口设定 input [5:0] p; //频率控制字 input[1:0] choose; //波形选择 input f_clk; //内置晶振 output [7:0] data; wire [7:0]data;reg [5:0] addr,address; reg [5:0] i;reg f_out;initialbegini<=0;addr<=0;f_out<=0;endalways @(posedge f_clk) //利用计数器实现任意分频beginif(i==p) //设定频率控制字pbegini=0;f_out=~f_out;endelsei=i+1;endfunction [7:0] romout; //ROM的设定input[5:0] address; case(address) //各波形初值的预装入0 : romout = 10; //正弦波初值 1 : romout = 17;2 : romout = 15;3 : romout = 17;4 : romout = 10;5 : romout = 3;6 : romout = 5;7 : romout = 3;8 : romout = 3; //方波初值 9 : romout = 3;10: romout = 3;11: romout = 3;12: romout = 1;13: romout = 1;14: romout = 1;15: romout = 1;16 : romout = 0; //正三角波初值 17 : romout = 5;18 : romout = 10;19 : romout = 15;20 : romout = 20;21 : romout = 25;22 : romout = 30;23 : romout = 35;24 : romout = 35; //反三角波初值 25 : romout = 30;26 : romout = 25;27 : romout = 20;28 : romout = 15;29 : romout = 10;30 : romout = 5;31 : romout = 0; default : romout = 10'hxx; endcase endfunctionalways@(posedge f_out)beginif(addr==8) //波形数据切换addr=0;elseaddr=addr+1;case(choose) //波形选择开关设定0: address=addr;1: address=addr+8;2: address=addr+16;3: address=addr+24;endcaseendassign data = romout(address);//将ROM中对应数据传递输出端口data输出endmodule四、实验截图1.正弦波示意图:(choose=0时的波形数值)2.方波示意图:(choose=1时的波形数值)3.正三角波示意图:(choose=2时的波形数值)4.反三角波示意图:(choose=3时的波形数值)五、实验总结通过这次期末实验,更进一步认识了Verilog语言的使用,详细了解了整个设计制作和仿真流程,独立思考并通过一步步的调试,逐步摸索和进一步优化程序最终完成实验,锻炼了逻辑思维能力。
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实验报告

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

2014-2015-2-G02A3050-1电子电路设计训练(数字EDA部分)实验报告(2015 年5 月20 日)教学班学号姓名组长签名成绩自动化科学与电气工程学院目录目录 .......................................................错误!未定义书签。
实验一、简单组合逻辑和简单时序逻辑............................错误!未定义书签。
实验任务1——简单组合逻辑...........................错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验任务2——简单时序逻辑...........................错误!未定义书签。
实验要求.........................................错误!未定义书签。
模块的核心逻辑设计...............................错误!未定义书签。
测试程序的核心逻辑设计...........................错误!未定义书签。
仿真实验关键结果及其解释.........................错误!未定义书签。
实验小结.............................................错误!未定义书签。
实验二、条件语句和always过程块...............................错误!未定义书签。
verilog实验报告 - 程超

西安邮电學院基于Verilog的数字电路模拟实验系部名称:通信与信息工程学院学生姓名:张宏扬专业名称:通信工程班级:通工0809学号:03081469(01)时间:2010年12月20号实验题目门级建模仿真实验一、实验内容设计的一个带有清零的顺序输出结果的计数器,q从0计数到15二、技术规范1、输入引脚:reset,clk;输出引脚:q。
2、功能:这时也个具有清零的计数器,从0到15输出的。
在其中用到了T触发器和D触发器来实现它的功能。
三、实验步骤1、在modulesim软件中对设计模块和验证模块进行书写和编译;2、对编译好的模块进行仿真。
四、源代码://脉动进位计数器顶层模块module ripple_carry_counter(q,clk,reset);output [3:0]q;input clk,reset;//生成了4个T触发器(T_FF)的实例,每个都有自己的名字T_FF tff0(q[0],clk,reset);T_FF tff1(q[1],q[0],reset);T_FF tff2(q[2],q[1],reset);T_FF tff3(q[3],q[2],reset);endmodule//触发器T_FFmodule T_FF(q,clk,reset);output q;input clk,reset;wire d;D_FF dff0(q,d,clk,reset);not n1(d,q); //非门(not)是Verilog语言的内置原语部件(primitive)endmodule//D触发器(D_FF)//带异步复位的D触发器(D_FF)module D_FF(q,d,clk,reset);output q;input d,clk,reset;reg q;//可以有许多种新结构,不考虑这些结构的功能,只需要注意设计块是如何以自顶向下的方式编写的always @(posedge reset or negedge clk)if (reset)q<= 1'b0;elseq<= d;endmodulemodule stimulus;reg clk;reg reset;wire [3:0]q;//引用已经设计好的模块实例ripple_carry_counter r1(q,clk,reset);//控制驱动设计块的时钟信号,时钟周期为10个时间单位initialclk = 1'b0; //把clk设置为0always#5 clk = ~clk; //每5个时间单位时钟翻转一次//控制驱动设计块的reset信号initialbeginreset = 1'b1;#15 reset = 1'b0;#180 reset = 1'b1;#10 reset = 1'b0;#20 $finish; //终止仿真end//监视输出initial$monitor($time, "Output q = %d",q);endmodule五、仿真结果及分析实验题目 RS锁存器一、实验内容带有延迟的RS锁存器,写出其带有延迟的Verilog门级描述。
北航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.掌握条件语句在简单时序模块设计中的使用。
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```四、实验结果与分析(一)基本逻辑门的结果通过仿真,与门、或门和非门的输出结果与预期的逻辑功能完全一致,验证了代码的正确性。
verilog_hdl电子时钟实验报告

电子时钟:电子时钟的功能:可以显示时间,还可以修改时间。
结构图NO.7:此电路适合于设计时钟、定时器、秒表等。
因为可利用键8和键5分别控制时钟的清零和设置时间的使能;利用键7、5和1进行时、分、秒的设置。
D16D15D14D13D12D11D9D8PIO47D7PIO46D6PIO45D5PIO44D4PIO43D3PIO42D2PIO41PIO40D1NO.7实验电路结构图SPEAKER扬声器FPGA/CPLD目标芯片12345678PIO0PIO2PIO3PIO4PIO5PIO6PIO7单脉冲单脉冲单脉冲键1键2键3键4键5键6键7键8PIO47-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16译码器译码器译码器译码器译码器译码器实验代码:模块一:时间显示//clk:秒功能的时钟信号,为1Hz的脉冲信号//time_set_en:时间设置使能信号//time_clear(键8):时钟显示的清零//hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set:设置后的小时、分、秒//hourh,hourl:小时的高低位//minh,minl:分的高低位//sech,secl:秒的高低位//cout:进位输出,即计满24小时,向天产生的进位输出信号moduletime_count(clk,time_set_en,time_clear,hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set,h ourh,hourl,minh,minl,sech,secl);input clk;input time_set_en,time_clear;input[3:0]hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set;output[3:0]hourh,hourl,minh,minl,sech,secl;reg[3:0]hourh,hourl,minh,minl,sech,secl;reg c1,c2; //c1和c2分别为秒向分,分向时的进位always@(posedge time_set_en or posedge clk or posedge time_clear)beginif(time_set_en) //time_set_en:时间设置使能信号beginsech<=sech_set;secl<=secl_set;minh<=minh_set;minl<=minl_set;hourh<=hourh_set;hourl<=hourl_set;endelse if(time_clear) //time_clear(键8):时钟显示的清零beginhourh<=0;hourl<=0;minh<=0;minl<=0;sech<=0;secl<=0;endelsebeginif(secl==9) //sech,secl:秒的高低位设置beginsecl<=0;if(sech==5)beginsech<=0;c1<=1;if(minl==9) //minh,minl:分的高低位设置beginminl<=0;if(minh==5)beginminh<=0;c2<=1;if((hourh==2)&&(hourl==3))beginhourh<=0;hourl<=0;endif(hourl==9) //hourh,hourl:小时的高低位设置beginhourl<=0;if(hourh==2)hourh<=0;elsehourh<=hourh+1;endelsebeginhourl<=hourl+1;endendelsebeginminh<=minh+1;endendelsebeginminl<=minl+1;c2<=0;endendelsebeginsech<=sech+1;endendelsebeginsecl<=secl+1;c1<=0;endendendendmodule模块二:时间设置//key7:设置数码管8和7//key4:设置数码管5和4//key1:设置数码管2和1//time_set_en(键5):设置时间的使能端//hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set:设置后的小时、分、秒//hourh,hourl,minh,minl,sech,secl:当前的小时,分,秒moduletime_set(key7,key4,key1,time_set_en,hourh,hourl,minh,minl,sech,secl,hourh_set,hourl_set,minh_ set,minl_set,sech_set,secl_set);input key7,key4,key1;input time_set_en;input[3:0]hourh,hourl,minh,minl,sech,secl;output[3:0]hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set;reg[3:0]hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set;always@(posedge time_set_en)beginif(key7)beginif((hourh_set==2)&&(hourl_set==3))beginhourh_set<=0;hourl_set<=0;endelse if(hourl_set==9)beginhourl_set<=0;if(hourh_set==2)hourh_set<=0;elsehourh_set<=hourh_set+1;endelsebeginhourl_set<=hourl_set+1;endendelse if(key4)beginif(minl_set==9)beginminl_set<=0;if(minh_set==5)beginminh_set<=0;endelseminh_set<=minh_set+1;endelsebeginminl_set<=minl_set+1;endendelse if(key1)beginif(secl_set==9)beginsecl_set<=0;if(sech_set==5)beginsech_set<=0;endelsesech_set<=sech_set+1;endelsesecl_set<=secl_set+1;endelsebeginhourh_set<=hourh;hourl_set<=hourl;minh_set<=minh;minl_set<=minl;sech_set<=sech;secl_set<=secl;endendendmodule模块三:顶层模块//clk:时间计数的时钟信号//time_set_en:设置时间使能信号//time_clear:显示时间清零使能信号//hourh,hourl,minh,minl,sech,secl:当前或设置后的小时,分,秒//key7:设置数码管8和7//key4:设置数码管5和4//key1:设置数码管2和1moduletime_and_set(clk,time_set_en,time_clear,hourh,hourl,minh,minl,sech,secl,key7,key4,key1); input clk;input time_set_en,time_clear;input key7,key4,key1;output[3:0] hourh,hourl,minh,minl,sech,secl;wire[3:0]hh,hl,mh,ml,sh,sl;wire[3:0]hh_set,hl_set,mh_set,ml_set,sh_set,sl_set;time_countU1( .clk(clk),.time_set_en(time_set_en),.time_clear(time_clear),.hourh_set(hh_set),.hourl_set(hl_s et),.minh_set(mh_set),.minl_set(ml_set),.sech_set(sh_set),.secl_set(sl_set),.hourh(hourh),.hourl(ho url),.minh(minh),.minl(minl),.sech(sech),.secl(secl));time_setU2(.key7(key7),.key4(key4),.key1(key1),.time_set_en(time_set_en),.hourh_set(hh_set),.hourl_set (hl_set),.minh_set(mh_set),.minl_set(ml_set),.sech_set(sh_set),.secl_set(sl_set),.hourh(hourh),.hou rl(hourl),.minh(minh),.minl(minl),.sech(sech),.secl(secl));endmodule模块一的时序仿真图:RTL图:引脚图:实验体会:通过这次课程设计,对fpga有了很多的的认识,而且懂得了硬件的更多知识,课程设计过程中,总会遇到很多的问题,然后一起跟同学讨论,或者问老师,解决问题之后感觉收获很多,而且学会了自己独立思考,查询资料。
Verilog期末实验报告波形发生器

一、实验目的使用Verilog软件编写四种波形任意发生器的源代码,用modelsim软件进行仿真测试,进一步强化Verilog,modelsim软件的编程能力为进一步的编程学习打下良好的基础。
二、实验原理2.1该任意波形发生器要实现三个功能:(1)通过计数器并结合拼接操作产生四种波形正弦波,方波,三角波1,三角波形的5位数据地址。
(2).设定ROM中对应波形地址地址的8位数值,将所有波形数值存储到ROM 中。
(3).设定2位的波形选择开关端口。
10000~1011111000~11111图1整体设计方案2.2 四种波形要在一个周期内等间隔取8个点,定义对应的数据,下图为示意图,由于编程序需要,数据会进行相应的修改。
图2 四种波形一个周期内的取样示意图2.3 四种波形数据地址对应的数据的存储器ROM根据示意图,由于实际情况需要,将正弦波平移至x 轴以上,并将所有波形的峰峰值取大100倍。
下表1是ROM 存储器波形选择地址 取样点的地址 ROM 数据00 000 171 00 001 200 000101711-111正弦波正弦波方波三角波1三角波2y xx88yyx 81表1 ROM存储器三、实验内容3.1 任意波形发生器verilog程序代码:module wave(data,clk,add1,reset);//顶层模块端口定义output[7:0]data;input clk,reset;input[1:0] addr1;Wire[1:0] addr1;wire clk,reset;//输入输出变量定义ADDR 4(addr,clk,addr1,reset);//地址发生器模块调用rom 1(addr,data);//ROM存储器模块调用endmodulemodule ADDR(addr,clk,addr1,reset);output[4:0] addr;input clk,reset;wire clk,reset;reg[2:0] addr2;wire[1:0] addr1;reg[4:0] addr;initial addr2=3'b000; //定义计数初值always @(posedge clk or posedge reset)//每当有clk,或reset信号开启程序beginif(reset)beginaddr2<=0;//同步复位addr<=0;endelse if(addr2>=7)//addr2计数至7时,addr2复位beginaddr2<=0;endelsebeginaddr2<=addr2+1;//addr2由0至7计数addr<={addr1,addr2};//addr1与addr2地址拼接为addr的最终地址endendendmodulemodule rom(addr,data);//数据存储器模块input[4:0] addr;output[7:0] data;function[6:0] romout;//定义函数,存储32个波形取样点地址的数据input[4:0] addr;reg[4:0] addr;wire[7:0] data;case(addr)//根据不同地址,得到不同数据。
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语言实验报告

专业:计算机科学与技术班级:CS1409学号:U**********名:***电话:158****5005邮件:*****************完成日期:2016.6.13 2016Verilog 语言·实验报告·计算机科学与技术学院目录1数据通路实验 (1)1.1实验目的 (1)1.2实验内容及要求 (1)1.3实验方案 (2)1.4实验步骤 (2)1.5故障及分析 (2)1.6仿真与结果 (3)1.7心得与体会 (4)2FSM实验 (5)2.1实验目的 (5)2.2实验内容及要求 (5)2.3实验方案 (6)2.4实验步骤 (6)2.5故障及分析 (7)2.6仿真与结果 (7)2.7心得与体会 (8)3意见和建议 (9)4附录 (10)1 数据通路实验1.1 实验目的综合应用掌握的简单组合电路和时序电路的设计方法,完成一个简单的数据通路的设计。
1.2 实验内容及要求1. 根据下图给出的数据通路(图中R0、R1和ACC是寄存器,+是加法器,其它则是多路选择器),完成相应的Verilog程序设计,图中数据线的宽度为8位,要求可以扩充至16位或者是32位;2. 根据下图给出的数据通路(图中SUM和NEXT是寄存器,Memory是存储器,+是加法器,==0是比较器,其它则是多路选择器),完成相应的Verilog程序设计,图中数据线的宽度为8位,要求可以扩充至16位或者是32位。
实验要求:程序必须自己编写,满足数据通路设计要求,综合结果正确。
1.3 实验方案根据要求,先把选择器、加法器、寄存器、比较器和存储器分模块编写,在主模块中根据数据通路调用即可。
题目中要求数据线宽度为8位,并且可以扩充至16位或32位,所以在前面定义WIDTH,利用parameter的参数传递功能来实现。
1.4 实验步骤1.分模块编写代码(见附录)2.运行综合Run Synthesis3.综合成功后检查RTL Analysis中的电路图Schematic1.5 故障及分析刚开始跑出来很多线是断的,后来发现是引脚对应部分的代码没有写完整。
verilog秒表实验报告

一,实验原理二,各模块程序与仿真结果图。
1,分频器,将晶振的48MHz频率分频为电子秒表的最小分辨频率,周期0.01S。
同时在译码部分需要一个1KHz的扫描信号,所以分频器的功能就是产生一个100Hz信号和1kHz信号。
源代码如下:module divclk(clk,clk_100,clk_1k);input clk;output reg clk_100,clk_1k;reg[29:0]counter1,counter2;initial begin counter1<=0;counter2<=0;clk_100<=0;clk_1k<=0;endalways@(posedge clk)beginif(counter1==240000)begin counter1<=0;clk_100<=~clk_100;endelse begin counter1<=counter1+1;endif(counter2==24000)begin counter2<=0;clk_1k<=~clk_1k;endelse begin counter2<=counter2+1;endendendmodule仿真结果2,计数器秒表计数器和一般计数器不同的是进制,在0.01s__0.99s时,都是十进制的,而到了秒和分的时候,十位秒和个位秒是十进制,秒和分之间则为六十进制所以在进位时注意区分。
秒表有两个按键,一个复位按键reset,一个run/stop按键,reset按键比较好处理,因为是点触式,可以检测其下降沿部位(低电平有效),当硬件检测到,说明是有按键按下。
而run/stop按键则为,按下一次这个键,秒表run和stop切换一次可定义一个信号寄存器,在检测到这个按键按下时,自身在0和1之间翻转一次,1表示run,0表示stop。
我们知道,在按键按下一次时会有如下的毛刺信号,这个毛刺信号持续时间虽然只有1-3ms,但是这对于硬件来说,还是很长的,最关键的是,会产生很多个下降沿和电平触发。
(完整word版)Verilog数字钟设计实验报告

基于FPGA实现多功能数字钟——电子系071180094王丛屹摘要本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,并通过ISE完成综合、仿真.此程序通过下载到FPGA 芯片后,可应用于实际的数字钟显示中,实现了基本的计时显示和设置,调整时间,闹钟设置的功能.[关键词]FPGA;Verilog HDL;数字钟一、多功能数字钟的设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。
能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示.能够利用按键实现“较时”、“较分"功能,随时对数码管的显示进行校正和校对.数字中系统主要由系统时钟,三个功能按键(mode,turn ,change ),FPGA ,数码管和蜂鸣器部分组成。
图: 多功能数字钟总体设计模块 以下就各个模块说明其功能1. 分频模块由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法.RTL图如下:代码如下:always @(posedge clk_1)if ( cnt2 〈156/2—1)/////////////////////////////////////100分频,生成10000Hz信号begincnt2 〈= cnt2 + 1;endelsebegincnt2 〈= 0;clk_2 <= ~clk_2;endalways @(posedge clk_2)if ( cnt5 〈10/2-1) /////////////////////////////////////////10分频,生成1kHz标准信号begincnt5〈= cnt5 + 1;endelsebegincnt5〈= 0;clk_1k〈= ~clk_1k;endalways @(posedge clk_2)if ( cnt3 < 100/2—1)//////////////////////////////////////////100分频,生成100Hz信号begin最终输出的是1Hz,100Hz,1kHz的标准时钟信号clk_1Hz ,clk_100Hz,clk_1k。
verilog报告(打印版)

Verilog大作业电科一班张威3006204023 徐建龙3006204019 万杰3006204015 王腾星3006204016电科二班刘欢3006204037源代码:`timescale 1ns/100psmodule transport;parameter longsize=65554;reg [24:1] meme[1:longsize],b;integer e,m,n,i,j,w;initialbeginw=$fopen("lena.bmp","rb");e=$fread(meme,w);$fclose(w);m=$fopen ("lena.txt");n=0;repeat (18)begin#100;n=n+1;b=meme[n];$fwrite (m,"%h",b);endfor(j=0;j<=255;j=j+1)for(i=1;i<=256;i=i+1)begin#100;n=18+256*i-j;b=meme[n];$fwrite(m,"%h",b);end$fclose(m);endendmodule仿真后Objects中的数值:仿真后波型:转换后在lena.txt中的数值:使用到的软件:在winhex中的数值:原图:经VERILOG转换后的图:在中间过程中由于算法错误产生的错误结果:设计说明书:1.先用$fread系统任务将BMP图片的二进制代码读入存储器meme中;2.读出的二进制代码的前54个字节是BMP位图的基本代码,因此在对图片进行翻转时前54个字节的位置不变。
后面为256*256个像素,每24位代表一个像素,BMP文件的数据是从左到右,从下到上的。
也就是说,从文件中最先读到的是图象最下面一行的左边第一个象素,然后是左边第二个象素……接下来是倒数第二行左边第一个象素,左边第二个象素……依次类推,最后得到的是最上面一行的最右一个象素。
verilog电子钟实验报告

深圳大学实验报告课程名称:硬件描述语言与逻辑综合实验项目名称:电子时钟Verilog HDL的设计与仿真学院:电子科学与技术学院专业:微电子科学与工程指导教师:一、实验目的1、掌握Quartus ii 软件的使用方法以及各种语句使用方法;2、学习如何运用verilog HDL 设计简单的数字电路3、掌握基本时序逻辑仿真的实现,以及上机运行的操作;4、掌握Verilog HDL 中模块运用的思想,为以后的实践打下基础。
二、实验原理数字时钟模块组织结构如图所示:数码管显示模块计时模块分频模块Clk 实验原理图如上图所示。
所谓的时钟,其实本质上就是计数器。
以开发板上的晶振时钟27MHZ 作为时间基准。
然后通过分频模块(计数器)进行分频,得到1Hz 的脉冲信号作为1秒的信号脉冲,然后用模60的计数器构成秒的计数单元。
每记60下就自动清零且产生进位信号。
将这个进位信号作为分的计数器的使能信号,其中,分计数器也是模为60的计数器。
这里的计数器都是由模10和模6组成的BCD码的计数器。
个位和十位分别是一个四位的数字。
同理,每记满60,分计数器就会产生一个进位信号,这个进位信号作为小时的使能信号。
小时的计数器就是模24的BCD计数器。
注意,这里的整个电路都是用1HZ的频率作为时间脉冲的,也就是说,这个电路是同步时序的电路。
通过使能,来控制各个部分的时序逻辑。
当在调时状态的时候,时钟每完成一个周期,无论是分钟还是小时,就向前加1。
最后,将分钟和小时通过译码器连接到数码管。
将秒直接连接到LED灯,完成整个工程的基本功能。
每个计数器要配两个译码器模块,以保证数值能正确的显示到DE2板上。
三、实验过程(附源代码)本实验需要用到四个模块,分别是27MHz的分频器模块,模为60的加法计数器模块,模为24的加法计数器模块以及七段数码管的译码器模块。
由四个模块和主函数构成整个源程序。
源程序所有代码如下:Moduleclock(reset,stop,clk,load_sec,load_min,load_hour,data,de_sec1,de_sec2,de_min1,de_min2,de_hour1,de_hour2);output[6:0]de_sec1,de_sec2,de_min1,de_min2,de_hour1,de_hour2;input reset,clk,load_sec,load_min,load_hour,stop;input[7:0]data;wire[7:0]sec,min,hour;wire one_second,sec_min,min_hour;//定义变量和数据类型等divider FP(one_second,stop,clk);//27MHZ分频成1HZ//计时部分count60miao(sec,sec_min,data,load_sec,1,reset,one_second);count60fen(min,min_hour,data,load_min,sec_min,reset,one_second);count24shi(hour,data,load_hour,min_hour,reset,one_second);//七位数码管显示部分decode4_7sec_1(de_sec1,sec[3:0]);decode4_7sec_2(de_sec2,sec[7:4]);decode4_7min_1(de_min1,min[3:0]);decode4_7min_2(de_min2,min[7:4]);decode4_7hour_1(de_hour1,hour[3:0]);decode4_7hour_2(de_hour2,hour[7:4]);endmodule//divider代码,分频器模块module divider(one_second,reset,clk);output one_second;input reset,clk;reg one_second;reg[23:0]cnt;always@(posedge clk)beginif(reset)begincnt<=0;one_second<=0;endelse if(cnt===13499999)begincnt<=0;one_second<=~one_second;endelsecnt<=cnt+1;endendmodule//代码结束//count60代码,秒、分计数模块module count60(qout,cout,data,load,cin,reset,clk); output[7:0]qout;output cout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[3:0]==9)//低位是否为9,如果是则beginqout[3:0]<=0;//回0,并判断高位是否为5if(qout[7:4]==5)qout[7:4]<=0;elseqout[7:4]<=qout[7:4]+1;//高位不为5,则加1 endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendassign cout=((qout==8'h59)&cin)?1:0;//产生进位输出信号endmodule//代码结束//count24代码,时计数模块module count24(qout,data,load,cin,reset,clk);output[7:0]qout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[7:4]==2)beginif(qout[3:0]==3)qout<=0;elseqout[3:0]<=qout[3:0]+1;endelsebeginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]<=0;//回0qout[7:4]<=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendendendmodule//结//decode4_7代码开始,七位数码管显示模块module decode4_7(decodeout,indec);output[6:0]decodeout;input[3:0]indec;reg[6:0]decodeout;always@(indec)begincase(indec)//用case语句进行译码,共阴4'd0:decodeout=7'b1000000;4'd1:decodeout=7'b1111001;4'd2:decodeout=7'b0100100;4'd3:decodeout=7'b0110000;4'd4:decodeout=7'b0011001;4'd5:decodeout=7'b0010010;4'd6:decodeout=7'b0000010;4'd7:decodeout=7'b1111000;4'd8:decodeout=7'b0000000;4'd9:decodeout=7'b0010000;default:decodeout=7'bz;endcaseendendmodule//结束四、时序仿真结果1、分频器时序仿真源代码:module divider(one_second,reset,clk);output one_second;input reset,clk;reg one_second;reg[23:0]cnt;always@(posedge clk)beginif(reset)begincnt<=0;one_second<=0;endelse if(cnt===5)//13499999改成5,为了使波形能够在时序仿真中顺利出现begincnt<=0;one_second<=~one_second;endelsecnt<=cnt+1;endendmodule2、模为60的加法计数器模块仿真源程序:module count60(qout,cout,data,load,cin,reset,clk);output[7:0]qout;output cout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]<=0;//回0,并判断高位是否为5if(qout[7:4]==5)qout[7:4]<=0;elseqout[7:4]<=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendassign cout=((qout==8'h59)&cin)?1:0;//产生进位输出信号endmodule3、模为24的加法计数器模块仿真源程序:module count24(qout,data,load,cin,reset,clk);output[7:0]qout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[7:4]==2)beginif(qout[3:0]==3)qout<=0;elseqout[3:0]<=qout[3:0]+1;endelsebeginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]<=0;//回0qout[7:4]<=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendendendmodule4、七段数码管译码器模块源程序:module decode4_7(decodeout,indec);output[6:0]decodeout;input[3:0]indec;reg[6:0]decodeout;always@(indec)begincase(indec)//用case语句进行译码4'd0:decodeout=7'b1000000;4'd1:decodeout=7'b1111001;4'd2:decodeout=7'b0100100;4'd3:decodeout=7'b0110000;4'd4:decodeout=7'b0011001;4'd5:decodeout=7'b0010010;4'd6:decodeout=7'b0000010;4'd7:decodeout=7'b1111000;4'd8:decodeout=7'b0000000;4'd9:decodeout=7'b0010000;default:decodeout=7'bz;endcaseendendmodule五、上机测试结果程序烧录到DE2板上后,由13个拨码开关控制整个程序的进行,SW17是置0功能,SW13是暂停功能,SW14到SW16则分别是三个计数器模块的置数开关,置数数据由SW0到SW7输入。
verlog实验报告

Verilog实验报告1. 引言本实验旨在通过使用Verilog硬件描述语言来实现一个简单的电路设计。
Verilog是一种用于描述电路行为和结构的编程语言,可以用于设计和仿真数字电路。
本实验将通过逐步的思考过程,详细说明实验的设计和实现。
2. 设计思路首先,我们需要确定电路的功能和需要实现的功能。
在这个例子中,我们将设计一个简单的4位加法器电路。
接下来,我们需要创建一个顶层模块,该模块将包含所需的输入和输出端口,并将其他模块连接在一起。
我们可以使用以下代码创建一个顶层模块:module top_module(input [3:0] a, input [3:0] b, output [3:0] sum);// 端口声明// 内部逻辑实现endmodule然后,我们可以创建一个子模块,该模块将执行实际的加法操作。
我们可以使用以下代码创建一个加法器模块:module adder(input [3:0] a, input [3:0] b, output [3:0] sum);// 加法操作实现endmodule在加法器模块中,我们可以使用位级操作符+来执行实际的加法运算。
我们可以使用以下代码实现加法操作:assign sum = a + b;最后,我们将在顶层模块中实例化加法器模块,并将输入和输出端口连接在一起。
我们可以使用以下代码实现实例化和连接:adder adder_instance(.a(a), .b(b), .sum(sum));3. 实验结果在完成上述步骤后,我们可以编译和仿真我们的Verilog代码。
可以使用常见的Verilog仿真器(如ModelSim)来进行仿真。
在仿真期间,我们可以为输入端口输入不同的二进制数,并观察输出端口是否正确计算了输入数的和。
通过逐步调试和测试,我们可以确保电路的正确性。
4. 总结通过本实验,我们学习了使用Verilog硬件描述语言设计和实现数字电路。
我们了解了Verilog的基本语法和结构,并通过实例演示了设计一个简单的4位加法器电路的过程。
verilog电子秒表设计

华中科技大学《电子线路设计、测试与实验》实验报告实验名称:电子秒表院(系):光学与电子信息学院专业班级:光材1102姓名:***学号:U*********时间:2013.12.5地点:南一楼实验成绩:指导教师:**2013 年12 月3 日实验目的:利用层次化方法在实验板设计实现一个能显示00.00 秒(百分之一秒)到59.99 秒,当计时达到并超过1 分钟时,给出LED 常亮信号告警,计数结果停留在计数最大值(即99.99 秒)上的电子秒表。
功能要求:基本功能:6) 设计一个能显示00.00 秒到59.99 秒的电子秒表。
7) 利用实验板所提供的50MHz 信号做为时钟信号。
8) 计数结果在AN3~AN0 中提供的数码管中显示。
9) 具有继续/暂停按键和复位清零开关。
拨码开关SW0 为复位开关,当SW0 为HIGH 时,系统复位,电子秒表显示时间为0 秒;当SW0 为LOW 时,系统开始按继续/暂停按键BTN0 控制进行工作;BTN0 为继续/暂停按键,当继续/暂停按键BTN0 按下时,系统暂停计数,AN1~AN0 显示停留在所暂停时刻;当继续/暂停按键BTN0 松开时,系统正常计数,显示精度为0.01 秒。
10) 当计时达到并超过1 分钟时,LD0 闪烁告警,计数结果停留在计数最大值上。
设计步骤与要求:1) 计算并说明采用Basys2 实验板时钟50MHz 实现系统功能的基本原理。
2) 在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。
3) 对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。
4) 输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文件。
# PlanAhead Generated physical constraintsNET "CLK" LOC = B8;NET "CLR" LOC = P11;NET "PAUSE" LOC = G12;NET "WARN" LOC = M5;NET "display[0]" LOC = F12;NET "display[1]" LOC = J12;NET "display[2]" LOC = M13;NET "display[3]" LOC = K14;NET "out_display[0]" LOC = L14;NET "out_display[1]" LOC = H12;NET "out_display[2]" LOC = N14;NET "out_display[3]" LOC = N11;NET "out_display[4]" LOC = P12;NET "out_display[5]" LOC = L13;NET "out_display[6]" LOC = M12;NET "out_display[7]" LOC = N13;NET "CLR" CLOCK_DEDICA TED_ROUTE = FALSE;# PlanAhead Generated IO constraintsNET "CLK" IOSTANDARD = LVCMOS33;NET "CLR" IOSTANDARD = LVCMOS33;NET "PAUSE" IOSTANDARD = LVCMOS33;NET "WARN" IOSTANDARD = LVCMOS33;NET "display[0]" IOSTANDARD = LVCMOS33;NET "display[1]" IOSTANDARD = LVCMOS33;NET "display[2]" IOSTANDARD = LVCMOS33;NET "display[3]" IOSTANDARD = LVCMOS33;NET "out_display[0]" IOSTANDARD = LVCMOS33;NET "out_display[1]" IOSTANDARD = LVCMOS33;NET "out_display[2]" IOSTANDARD = LVCMOS33;NET "out_display[3]" IOSTANDARD = LVCMOS33;NET "out_display[4]" IOSTANDARD = LVCMOS33;NET "out_display[5]" IOSTANDARD = LVCMOS33;NET "out_display[6]" IOSTANDARD = LVCMOS33;NET "out_display[7]" IOSTANDARD = LVCMOS33;NET "CLK" DRIVE = 12;5) 在Basys2 实验板上下载所生成的.bit 文件,观察验证所设计的电路功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安邮电大学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的语法的认识。
实验二二进制全加器设计一、实验目的(1)熟悉Verilog HDL 元件实例化语句的作用(2)熟悉全加器的工作原理(3)用Verilog HDL 语言设计一位二进制全加器,并仿真,验证其功能二、实验内容一位全加器使用乘积项之和的形式可以表示为: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描述,限制是每个门最多只能有四个输入端。
编写激励模块对其功能进行检查,并对全部的输入组合输入组合进行测试。
实验要求用 Verilog HDL 语言描述一位全加器,并使用 modelsim仿真验证结果。
module fulladd(sum,c_out,a,b,c_in);output sum,c_out;input a,b,c_in;wire s1,s2,s3,s4,a1,b1,c_in1,c1,c2,c3;and(s1,a,b,c_in);not(a1,a);not(b1,b);not(c_in1,c_in);and(s2,a1,b,c_in1);and(s3,a1,b1,c_in);and(s4,a,b1,c_in1);and(c1,a,b);and(c2,b,c_in);and(c3,a,c_in);or(sum,s1,s2,s3,s4);or(c_out,c1,c2,c3);endmodulemodule stimulus;reg A,B,C_IN;wire SUM,C_OUT;fulladd FA1(SUM,C_OUT,A,B,C_IN);initialbegin$monitor($time,"A=%b,B=%b,C_IN=%b,---C_OUT=%b,SUM=%b\n",A,B,C_IN,C_OUT,SUM);end//initialbeginA=1'd0;B=1'd0;C_IN=1'b0;#5 A=1'd0;B=1'd0;C_IN=1'b1;#5 A=1'd0;B=1'd1;C_IN=1'b0;#5 A=1'd0;B=1'd1;C_IN=1'b1;#5 A=1'd1;B=1'd0;C_IN=1'b0;#5 A=1'd1;B=1'd0;C_IN=1'b1;#5 A=1'd1;B=1'd1;C_IN=1'b0;#5 A=1'd1;B=1'd1;C_IN=1'b1;End实验结果波形:三.分析和心得通过这次试验我熟悉了Verilog HDL 元件例化语句的作用,并且熟悉全加器的工作原理。
在一位全加器的过程中,也了解了如何调用模块。
实验三使用JK触发器设计一个计数器一、实验目的(1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容一个同步计数器可以使用主从JK触发器来设计。
设计一个同步计数器,其逻辑图和JK触发器的逻辑图如书中图所示。
清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出;当count_enable信号为低电平时停止计数。
写出同步计数器的Verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。
技术规范:本次试验中共有三个模块,分别是JK主从触发器设计模块,计数器设计模块及激励模块。
对于JK触发器,共有四个输入端(j,k,clear,clock),两个输出端(q,qbar),根据其实际电路结构做出相应的设计;对于计数器模块,有三个输入端(clear,clock,counter_clock),四个输出(Q[3:0]),使用的是四个JK触发器和门电路组合,采用同步清零和同步脉冲构成四位同步计数器;激励模块中根据技术模块输入端口进行相关赋值以便进行仿真观察;三.实验步骤:1.在modulesim软件中使用数据流建模进行四位计数器设计及输入;2.进行编译及仿真。
四.源代码:JK触发器模块:module m_c_jkff(q,qbar,J,K,clear,clock);output q,qbar;input J,K,clear,clock;wire a,b,c,d,y,ybar,cbar;assign cbar=~clock;assign #1 a=~(J & qbar & clock & clear),b=~(K & q & clock),y=~(a & ybar),ybar=~(y & b & clear),c=~(y & cbar),d=~(ybar & cbar);assign #1 q=~(c & qbar);assign #1 qbar=~(d & clear & q);endmodule计数器模块:module four_count_ff(Q,clear,clock,count_enable);output [3:0] Q;input clear,clock,count_enable;wire a1,a2,a3;assign a1=count_enable & Q[0],a2=a1&Q[1], a3=a2&Q[2];m_c_jkff m1(Q[0],,count_enable,count_enable,clear,clock); m_c_jkff m2(Q[1],,a1,a1,clear,clock);m_c_jkff m3(Q[2],,a2,a2,clear,clock);m_c_jkff m4(Q[3],,a3,a3,clear,clock);endmodule激励模块:module stimulus;reg clock,clear,count_enable;wire [3:0] Q;initial$monitor($time,"Count Q = %b Clear = %b",Q[3:0],clear); four_count_ff f1(Q,clear,clock,count_enable);initialbeginclear=1'b0;count_enable=1'b1;#10 clear=1'b1;//#1 count_enable=1'b1;//#50 clear=1'b0;//#100 count_enable=1'b0;//#100 clear=1'b0;//#50 clear=1'b1;//#50 count_enable=1'b1;endinitialbeginclock=1'b0;forever #20 clock=~clock;endinitial#1000 $finish;Endmodule波形图:实验四八功能算术运算单元一、实验目的(1)熟悉Modelsim 软件(2)掌握Modelsim 软件的编译、仿真方法(3)熟练运用Modelsim 软件进行HDL 程序设计开发二、实验内容使用case语句设计八门功能的算术运算单元(ALU),输入信号a,b为4位,功能选择信号select为3位,输出信号out为5位。