Verilog HDL十进制计数器实验Quartus90非常详细的步骤
- 格式:doc
- 大小:2.04 MB
- 文档页数:23
《FPGA》课程报告设计题目:基于HDL的十进制计数器学生班级:学生学号:学生姓名:指导教师:时间:成绩:一、实验目的:1.掌握基于语言的ISE设计全流程;2.熟悉、应用VerilogHDL描述数字电路;3.掌握基于Verilog的组合和时序逻辑电路的设计方法。
二、实验原理:本次实验是使用Verilog HDL进行编写十进制计数器与显示器代码而进行的实验,实验原理图如下:本次实验的内容包括十进制计数器模块,七段译码显示器模块,以及消抖模块。
十进制计数器:对输入时钟进行计数输入:CLK -------待计数的时钟CLR ---------异步清零信号,当CLR =1,输出复位为0,当CLR =0,正常计数ENA---------使能控制信号,当ENA=1,电路正常累加计数,否则电路不工作输出:SUM[3:0]---------- 计数值的个位。
即,在CLK上升沿检测到SUM=9时,SUM将被置0,开始新一轮的计数。
COUT ------------计数值的十位进位,即:只有在时钟CLK上升沿检测到SUM=9时,COUT将被置1,其余情况下COUT=0;LED显示驱动模块:输入:sum[3:0] -------待显示的数值out[6:0] ----------驱动数码管的七位数值七段数码管的字符显示真值表如下:消抖模块:三、实验过程:1.首先建立一个新的工程,添加一个新的Verilog Module,在其中编写十进制计数模块的代码,如下:module liao1(CLR,CLK,ENA,SUM,COUT);input CLR,CLK,ENA;output[3:0] SUM;output COUT;reg[3:0] SUM;reg COUT;always@(posedge CLK or posedge CLR)if(CLR)beginSUM<=4'b0000;COUT<=1'b0;endelseif(ENA)beginif(SUM==9)beginSUM<=4'b0000;COUT<=1'b1;endelsebeginSUM<=SUM+1'b1;COUT<=1'b0;endendendmodule然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:2.再新建一个Verilog Module,在其中编写七段数码显示模块的代码,如下:module liao2(SUM,out);input[3:0] SUM;output[6:0] out;reg [6:0] out;always @(SUM)begincase(SUM)4'b0000: out<=7'b0000001;4'b0001: out<=7'b1001111;4'b0010: out<=7'b0010010;4'b0011: out<=7'b0000110;4'b0100: out<=7'b1001100;4'b0101: out<=7'b0100100;4'b0110: out<=7'b0100000;4'b0111: out<=7'b0001111;4'b1000: out<=7'b0000000;4'b1001: out<=7'b0000100;default :out<=7'b0000001;endcaseendendmodule执行综合,确认无误后新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:3.添加消抖模块,然后再新建一个Verilog Module,编写例化文件,制成顶层文件,其例化文件代码如下:module liao(CLK_50M,CLK,CLR,ENA,COUT,out);input CLR,CLK,ENA;input CLK_50M;output[6:0] out;output COUT;wire[3:0] SUM;debounce_module u1(CLK_50M,CLR,CLK,clk_out);liao1 u2(CLR,clk_out,ENA,SUM,COUT);liao2 u3(SUM,out);endmodule保存之后形成顶层文件:4.执行综合,确认无误后,根据实验指导书进行锁引脚操作:锁引脚完成后,修改、编辑约束文件:5.生成下载配置文件,下载到开发板进行经行验证。
Verilog HDL是一种硬件描述语言,常用于数字电路设计和仿真。
在Verilog HDL中,我们经常需要进行十进制计算,因此熟练掌握Verilog HDL中的十进制计算方法对于数字电路设计工程师来说非常重要。
本文将介绍Verilog HDL中的十进制计算方法,并结合实例进行详细说明。
一、Verilog HDL中的十进制计算在Verilog HDL中,可以使用十进制数进行计算和赋值。
十进制数可以用整数和实数表示。
1. 整数表示:可以直接使用十进制数来表示整数,例如:```verilogint a = 10; // 整数a赋值为10```2. 实数表示:可以使用科学计数法来表示实数,例如:```verilogreal b = 1.5e3; // 实数b赋值为1500```二、十进制计算实例演示下面通过实例来演示Verilog HDL中的十进制计算方法。
实例1:整数计算假设我们需要设计一个模块,实现两个整数之和的计算。
我们可以使用Verilog HDL来实现这一功能。
```verilogmodule adder (input int a,input int b,output int sum);assign sum = a + b; // 计算a和b的和并赋值给sumendmodule```在这个实例中,我们定义了一个add模块,其中有两个输入a和b,一个输出sum。
我们使用assign关键字进行赋值操作,计算a和b 的和并将结果赋值给sum。
这样,我们就实现了两个整数之和的计算功能。
实例2:实数计算接下来,我们再演示一个实数计算的例子。
假设我们需要设计一个模块,实现两个实数相乘的计算。
我们同样可以使用Verilog HDL来实现这一功能。
```verilogmodule multiplier (input real x,input real y,output real product);assign product = x * y; // 计算x和y的积并赋值给productendmodule```在这个实例中,我们定义了一个multiplier模块,其中有两个输入x和y,一个输出product。
FPGA实验报告二实验名称:基于HDL十进制计数器设计姓名:学号:班级:指导老师:时间:2013年3月18日实验二:基于HDL十进制计数器设计一、实验目的1、掌握基于语言的ISE设计全流程;2、熟悉、应用VerilogHDL描述数字电路;3、掌握基于Verilog的组合和时序逻辑电路的设计方法二、实验要求1、用HDL语言设计七段显示译码电路,以及十进制加法计数器。
2、要求LED定位显示。
3、完成LED七段码波形的仿真分析4、在目标板按要求显示译码结果。
三、实验原理本次试验将完成的设计是一个具有数显输出的十进制计数器。
示意图如2.1所示。
图2.1七段数码管属于数码管的一种,是由7段二极管组成。
按发光二极管单元衔接方式分为共阳极数码管和共阴极数码管。
本实验使用共阴数码管。
它是指将一切发光二极管的阴极接到一同构成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平相应字段就点亮,当某一字段的阳极为低电平相应字段就不亮。
显示译码器,用HDL语言判断CLK的上升沿信号,每次收到一次上升沿信号,计数器的值加一并显示在数码管上,所以本次实验会将十进制计数与七段数码管的显示分别写在两个模块里面。
消抖模块,这次不用学生完成,只用在最后的top文件中调用就行。
本实验可以采用ISE软件的HDL语言描述七段数码管的功能与十进制计数功能。
完成的设计是一个具有数显输出的十进制计数器。
四、实验步骤1、设计准备(1)设计任务表述:输入信号:clk -------待计数的时钟clr ---------异步清零信号,当clr=1,输出复位为0,当clr=0,正常计数ce---------使能控制信号,当ce=1,电路正常累加计数,否则电路不工作输出信号:q[6:0]---------驱动数码管,显示计数值的个位cout -----------驱动发光二极管,显示计数值向十位的进位(2)本实验共包括3个模块:十进制计数器驱动七段数码管模块消抖模块,待计数的时钟clk输入至计数器前,先通过消抖模块。
10进制计数器1.实验目的了解时序逻辑电路的分析方法,掌握任意进制计数器的反馈清零法和反馈置数法,并对Quartus软件有更为深入的了解。
2.实验内容1)使用Verilog语言实现10进制计数器设计2)在Quartus中仿真波形3)使用DE0开发板下载、验证,数码管上显示0-9,同时使用4位发光二极管3.代码分析1)本程序主要通过变量cnt 的计数来完成模十的计数。
每当cnt达到9后下一次便清零,完成一次循环。
2)主模块中首先定义了本次实验的所有输入输出接口及其中的一些连线。
module exp6(clk,o);input clk;output [10:0] o; //seg7 led4wire [10:0] o;wire cp;reg [3:0] cnt;3)然后程序的时钟转换模块将内置的50MHz的时钟转化成为1Hz的时钟,并用它计数后输出至数码管和LED上。
freqDiv FA0 (clk,cp); //to change the clock rateSEG7_LUT FA1 (o,cnt); //to output dataalways @ (posedge cp) //to countbeginif (cnt<4'd9) cnt<=cnt+1'b1;else cnt<=4'b0;endendmodule4)时钟转换模块中同样先定义了各个输入输出接口,由于cnt要计数到24999999,故设为32位。
// to change the clock ratemodule freqDiv(in_50MHz,out_1Hz);input in_50MHz;output out_1Hz;reg out_1Hz;reg [31:0]cnt;5)然后通过cnt的计数来转换时钟频率:always@(posedge in_50MHz)beginif(cnt < 32'd2*******)begincnt <= cnt + 1'B1;endelsebegincnt <= 32'b0;out_1Hz <= ~out_1Hz;endendendmodule6)在输出模块中,先定义了4位的数据输入和7位的数码管输出和4位LED灯输出,并将输出设为寄存器变量。
Lab6 10进制计数器吴晓鸣五班U2011138401.实验目的a. 使用Verilog语言实现10进制计数器设计。
b. 做出仿真波形。
c. 使用DE0开发板下载、验证。
2.实验内容●编写十进制计数器的代码,烧录到DE0中●用LED灯显示计数3.代码分析module abc(EN,CP,CR,Q);input EN,CP,CR;//三个输入端口output [3:0]Q;//四个输出端口reg[3:0]Q;always @(posedge CP or negedge CR)//当CP为上升沿或CR为下降沿if(~CR)Q=4'b0000;//清零开关else if(EN)//使能开关beginif(Q>=4'b1001) Q<=4'b0000;//当Q的值大于等于9,跳到0else Q<=Q+1'b1;endelse Q<=Q;endmodule4.实验步骤●新建一个工程,选择相应的实验板型号,创建一个Verilog HDL文件,输入程序。
●分析并编译程序,设置开发板引脚。
●连接实验板,烧入程序。
5. 实验结果的测试和分析a.编译代码:b.仿真波形c. 下载到DE0实验板上:设置引脚后,LED灯有规律的闪动,到9后,跳回0.6.实验总结通过这个实验,我了解了计数器与分频器的基本原理,熟悉了怎样用LED和verilog 来实现10进制的计数器,并用DE0显示实验结果。
7. 参考文献[1]康华光.电子技术基础(数字部分)北京:高等教育出版社,2006.[2]罗杰.Verilog HDL与数字ACIC设计基础武汉:华中科技大学出版社,2008.。
实验二十进制计数器实验该实验将使用Verilog硬件描述语言在DE2-70开发平台上设计一个基本时序逻辑电路——1位十进制计数器。
通过这个实验,读者可以了解使用Quartus工具设计硬件的基本流程以及使用Quartus II内置的工具进行仿真的基本方法和使用SignalTap II实际观察电路运行输出情况。
SignalTap II是Quartus工具的一个组件,是一个片上的逻辑分析仪,可以通过JTAG电缆将电路运行的实际输出传回Quartus进行观察,从而省去了外界逻辑分析仪时的很多麻烦。
实验步骤3.1建立工程并完成硬件描述设计1.打开Quartus II工作环境,如图3-1所示。
图3-1Quartus II工作环境界面2.点击菜单项File->New Project Wizard帮助新建工程。
参看图3-2。
图3-2选择New Project Wizard打开Wizard之后,界面如图3-3所示。
点击Next,如图3-3。
第23页共208页图3-3New Project Wizard界面3.输入工程工作路径、工程文件名以及顶层实体名。
这次实验会帮助读者理解顶层实体名和工程名的关系,记住目前指定的工程名与顶层实体名都是Counter10,输入结束后,如图3-4所示。
点击Next。
图3-4输入设计工程信息4.添加设计文件。
界面如图3-5所示。
如果用户之前已经有设计文件(比如.v文件)。
那么再次添加相应文件,如果没有完成的设计文件,点击Next之后添加并且编辑设计文件。
图3-5添加设计文件5.选择设计所用器件。
由于本次实验使用Altera公司提供的DE2-70开发板,用户必须选择与DE2-70开发板相对应的FPGA器件型号。
在Family菜单中选择Cyclone II,Package选FBGA,Pin Count选896,Speed grade 选6,确认Available devices中选中EP2C70F896C6,如图3-6。
基于Verilog HDL 的10 位超前进位加法器设计指导教师单位电子与通信工程学院指导教师姓名陈宇宁年 6月 22 日2014设计题目:设计一个10 位的超前进位加法器。
要求作出功能和时序仿真。
总体设计方案1.1设计原理将n 个全加器相连可得n 位加法器,但是加法时间较长。
解决的方法之一是采用“超前进位产生电路”来同时形成各位进位,从而实现快速加法。
超前进位产生电路是根据各位进位的形成条件来实现的。
4 位超前进位加法器的设计:首先对于 1 位全加器其本位值和与进位输出可表示如下:sum a b c inc out (a b) (a c in) (b c in) ab (a b)c in从上面的式子可看出:如果 a 和 b 都为1,则进位输出为1,如果 a 和 b 有一个为 1 ,则进位输出等于c in 。
令G=ab 。
P=a+b ,则有:c out ab (a b)c in G P c in 。
由此可以用G和P来写出4位超前进位链如下:(设定 4 位被加数和加数为A和B,进位输入为c in ,进位输出为c out ,进位产生 G i A i B i,进位传输 P i A iBi 。
)C0 CinC1 G0P0C0 G0 P0C inC2G1P1C1G1P1(G0P0C in) G1P1G0P1P0C inC3G2P2C2G2P2(G1P1C1) G2P2G1P2P1P0C inC4 G3P3C3 G3 P3(G2 P2C2) G3 P3G2 P3P2G1P3P2P1G0 P3P2P1P0C inC out C4由上面的超前进位链可看出:各个进位彼此独立产生,将进位级连传播给去掉了,因此,减小了进位产生的延迟时间。
1.210 位超前进位加法器的Verilog 描述由上面的 4 位超前进位加法器可以推出10 位超前进位加法器的Verilog 描述:module add_ahead(sum,cout,a,b,cin);input[9:0] a,b; input cin ; output[9:0] sum;output cout; wire[9:0] G,P;wire[9:0] C,sum;assign G[0]=a[0]&b[0];assign P[0]=a[0]|b[0];assign C[0]=cin;assign sum[0]=G[0]^P[0]^C[0];assign G[1]=a[1]&b[1];assign P[1]=a[1]|b[1];assign C[1]=G[0]|(P[0]&cin);assign sum[1]=G[1]^P[1]^C[1];assign G[2]=a[2]&b[2];assign P[2]=a[2]|b[2];assign C[2]=G[1]|(P[1]&C[1]);assign sum[2]=G[2]^P[2]^C[2];assign G[3]=a[3]&b[3];assign P[3]=a[3]|b[3];assign C[3]=G[2]|(P[2]&C[2]);assign sum[3]=G[3]^P[3]^C[3];assign G[4]=a[4]&b[4];assign P[4]=a[4]|b[4];assign C[4]=G[3]|(P[3]&C[3]);assign sum[4]=G[4]^P[4]^C[4];assign G[5]=a[5]&b[5];assign P[5]=a[5]|b[5];assign C[5]=G[4]|(P[4]&C[4]); assign sum[5]=G[5]^P[5]^C[5];assign G[6]=a[6]&b[6];assign P[6]=a[6]|b[6];assign C[6]=G[5]|(P[5]&C[5]); assign sum[6]=G[6]^P[6]^C[6];assign G[7]=a[7]&b[7];assign P[7]=a[7]|b[7];assign C[7]=G[6]|(P[6]&C[6]); assign sum[7]=G[7]^P[7]^C[7];assign G[8]=a[8]&b[8];assign P[8]=a[8]|b[8];assign C[8]=G[7]|(P[7]&C[7]); assign sum[8]=G[8]^P[8]^C[8];assign G[9]=a[9]&b[9];assign P[9]=a[9]|b[9];assign C[9]=G[8]|(P[8]&C[8]); assign sum[9]=G[9]^P[9]^C[9];assign cout=G[9]|(P[9]&C[9]);endmodule1.3 设计环境本文在设计 10 位超前进位加法器过程中,采用 Quartus II9.0 软件。
十进制加减法计数器1.实验要求(1)在Modelsim环境中编写十进制加减法计数器程序;(2)编译无误后编写配套的测试程序;(3)仿真后添加信号,观察输出结果。
2.设计程序如下module decade_counter#(parameter SIZE=4)(input clock,load_n,clear_n,updown,input [SIZE-1:0]load_data,output reg [SIZE-1:0]q);always@(negedge load_n,negedge clear_n,posedge clock)if (!load_n)q<=load_data;else if (!clear_n)q<=0;else //clockif(updown)q<=(q+1)%10;elsebeginif(q==0)q<=9;elseq<=q-1;endendmodule3.测试程序如下`timescale 1ns/1nsmodule test_decade_counte;reg clock,load_n,clear_n,updown;reg [3:0]load_data;wire [3:0]q;decade_counter T1(clock,load_n,clear_n,updown,load_data,q);initialbeginclock=0;clear_n=0;#30 clear_n=1;load_n=0;load_data=7;#30 load_n=1;updown=0;#300 updown=1;#300 updown=0;#300 updown=1;#300 $stop;endalways#10 clock=~clock;always@(q)$display("At time%t,q=%d",$time,q);endmodule4.波形如下5.测试结果如下# At time 0,q= 0# At time 30,q= 7# At time 70,q= 6# At time 90,q= 5# At time 110,q= 4# At time 130,q= 3# At time 150,q= 2# At time 170,q= 1# At time 190,q= 0# At time 210,q= 9# At time 230,q= 8# At time 250,q= 7# At time 270,q= 6# At time 290,q= 5# At time 310,q= 4# At time 330,q= 3# At time 370,q= 3 # At time 390,q= 4 # At time 410,q= 5 # At time 430,q= 6 # At time 450,q= 7 # At time 470,q= 8 # At time 490,q= 9 # At time 510,q= 0 # At time 530,q= 1 # At time 550,q= 2 # At time 570,q= 3 # At time 590,q= 4 # At time 610,q= 5 # At time 630,q= 6 # At time 650,q= 7 # At time 670,q= 6 # At time 690,q= 5 # At time 710,q= 4 # At time 730,q= 3 # At time 750,q= 2 # At time 770,q= 1 # At time 790,q= 0 # At time 810,q= 9 # At time 830,q= 8 # At time 850,q= 7 # At time 870,q= 6 # At time 890,q= 5 # At time 910,q= 4 # At time 930,q= 3 # At time 950,q= 2 # At time 970,q= 3 # At time 990,q= 4 # At time 1010,q= 5 # At time 1030,q= 6 # At time 1050,q= 7 # At time 1070,q= 8 # At time 1090,q= 9 # At time 1110,q= 0 # At time 1130,q= 1 # At time 1150,q= 2 # At time 1170,q= 3 # At time 1190,q= 4 # At time 1210,q= 5# At time 1250,q= 7。
Lab 61.实验目的熟悉用Quartus编译Verilog语言的方法。
使用verilog语言实现10进制计数器计数。
2.实验内容使用Verilog语言实现10进制计数器设计仿真波形可选:使用DE0开发板下载、验证(使用4位发光二极管即可)可选:在DE0开发板的数码管上显示0-9,计数时钟可以使用Lab7的1Hz3.代码分析实现10进制计数器计数,则意味着输入方波时每一个脉冲上升沿都将记一次数,然后再将其通过电信号的方式进行表示出来。
则可得出输出端口有长度为4的输出端或数字输出端。
故有:always @ (posedge CP_out)case (Func)2'b00: Q<=4'd0;2'b01: if(Q<4'd9)Q<=Q+1; else Q<=4'd0;2'b10: if(Q==4'd0)Q<=4'd9; else Q<=Q-1;2'b11: Q<=D;endcase又EDO实验板上只有50MHz的方波脉冲,所以可假借lab7中的分频器设计,从而得到理想的秒脉冲。
最后可得出程序为:module lab6 (Q, L, D, CP, TC, Func);input [3:0] D;input [1:0] Func;input CP;output TC;output reg [3:0] Q=4'd9;output [6:0] L;assign TC =(Func != 2'b00)&(Q==4'd0);lab7 (CP_out,CP);light(L,Q);always @ (posedge CP_out)case (Func)2'b00: Q<=4'd0;2'b01: if(Q<4'd9)Q<=Q+1; else Q<=4'd0;2'b10: if(Q==4'd0)Q<=4'd9; else Q<=Q-1;2'b11: Q<=D;endcaseendmodule4.实验步骤1)连接DEO板的电源线和数据线,打开开关。
实验一十进制计数器的设计姓名:庞啟明学号:1112120110 专业:自动化一、实验目的熟悉QuartusⅡ的Verilog HDL文本设计流程全过程,学习计数器的设计、仿真和硬件测试。
二、实验原理该程序设计是带有异步复位、同步计数使能、可预置型功能全面的十进制计数器。
(1)第一个条件句if(!RST)构成的RST接于寄存器下方的异步清0端CLR。
(2)第二个条件句if(EN)构成EN接于寄存器左侧的使能端ENA。
(3)第三个条件句if(LODA)构成LODA接于上面的多路选择器,使之控制选择来自DATA的数据,还是来自另一多路选择器的数据。
(4)不完整的条件语句与语句Q1<=Q1+1构成了加1加法器和4位寄存器。
(5)语句(Q1<9)构成了小于比较器,比较器的输出信号控制左侧多路选择器。
(6)第二个过程语句构成了纯组合电路模块,即一个等式比较器,作进位输出。
三、实验设备与软件平台实验设备:计算机、FPGA硬件平台是Cyclone系列FPGA软件平台:Quartus II 9.1 (32-Bit)、5E+系统四、实验内容编写Verilog程序描述一个电路,实现以下功能:设计带有异步复位、同步计数使能和可预置型的十进制计数器。
具有5个输入端口(CLK、RST、EN、LOAD、DATA)。
CLK输入时钟信号;RST起异步复位作用,RST=0,复位;EN是时钟使能,EN=1,允许加载或计数;LOAD是数据加载控制,LOAD=0,向内部寄存器加载数据;DATA是4位并行加载的数据。
有两个输出端口(DOUT和COUT)。
DOUT的位宽为4,输出计数值,从0到9;COUT是输出进位标志,位宽为1,每当DOUT为9时输出一个高电平脉冲。
五、实验步骤设计程序:module CNT10 (CLK,RST,EN,LOAD,COUT,DOUT,DATA);input CLK;input EN;input RST;input LOAD;input [3:0] DATA;output [3:0] DOUT;output COUT;reg [3:0] Q1 ;reg COUT ;assign DOUT = Q1;always @(posedge CLK or negedge RST) beginif (!RST) Q1 <= 0;else if (EN) beginif (!LOAD) Q1 <= DATA;else if (Q1<9) Q1 <= Q1+1;else Q1 <= 4'b0000;endendalways @(Q1)if (Q1==4'h9) COUT = 1'b1;else COUT = 1'b0;Endmodule设计流程:1.编辑和输入设计文件(1)、新建一个文件夹如D:\CNT10 ,本工程所有文件将存放在此目录中。
verilog设计⼗进制计数器(含进位位)⼗进制计数器:设计要求:1、每当计数器值为4’b001时,⾃动回到4’b00002、每个时钟沿计数器值加13、进位输出carry应该与4'b1001同周期输出4、异步复位module cnt10 ( clk, rst_n, carry, cnt );input clk, rst_n;output carry;output [3:0] cnt;reg carry;reg [3:0] cnt;always @( posedge clk or negedge rst_n )beginif ( ~rst_n )begincnt <= 4'b0000;endelse if ( cnt == 4'b1001 )begincnt <= 4'b0000;endelsebegincnt <= cnt + 4'b0001;endendalways @(posedge clk or negedge rst_n)beginif(!rst_n)begincarry <= 1'b0;endelse if(cnt == 4'b1000)begincarry <= 1'b1;endelsecarry<= 1'b0;endendmoduleView Code测试程序:`timescale 1ns/1psmodule cnt10_tb();reg clk, rst_n;wire carry;wire [3:0] cnt;always #10 clk = ~clk;cnt10 cnt10_tb(.clk(clk),.rst_n(rst_n),.carry(carry),.cnt(cnt));initialbeginclk = 1'b0;rst_n = 1'b1;#10 rst_n = 1'b0;#10 rst_n = 1'b1;endendmodule波形图:在这个⼗进制计数器中,唯⼀要注意的⼀点就是进位位carry变化的时刻,如果是为了使下⼀级能正确接收到前⼀级的进位位标识,要在计数到九时使进位位有效;如上图波形所⽰。
以下是一个简单的10进制计数器的Verilog代码。
这个计数器在每个时钟周期内递增,并在计数到10后回滚到0。
verilog复制代码
module counter_10 (
input wire clk,
input wire reset,
output reg [3:0] count
);
always @(posedge clk or posedge reset) begin
if (reset) begin
count <= 4'b0000;
end else begin
count <= count + 1;
end
end
endmodule
在这个模块中,clk是时钟输入,reset是复位输入,count是4位的输出,表示当前的计数值。
在每个时钟上升沿,count都会递增。
当count达到10(即二进制的1010)时,它会被复位回0。
如果复位信号被激活,无论时钟状态如何,count都会被立即复位。
请注意,这是一个非常基础的计数器设计,没有包括一些更复杂的功能,比如预置值、异步/同步复位等。
如果你需要这些功能,你可能需要修改或扩展这个设计。
十进制计时器设计一、实验目的:熟悉Quartus II的开发环境和开发流程,掌握Verilog文本设计流程,并使用Verilog编写一个十进制计时器,在Altera-Modelsim软件上仿真,验证十进制计时器的功能是否正确。
二、实验原理:十进制计数器的CLK为计数的信号,上升沿有效;RST为计数器复位信号;EN为时钟使能信号,当EN处于高电平时,计数器在CLK有效时开始计数;DATA为4位并行的数据输入端;DOUT为4位并行的数据输出端;Load为计数器的数据加载控制信号,当Load处于低电平时,数据输入端DATA 的数据被加载至数据输出端DOUT;Cout为计数器的进位输出。
三、实验步骤:3.1创建项目(1)新建一个文件夹存放EDA项目设计的相关文件。
本项设计的内容为十进制计数器,并且文件名不能使用中文,因此文件夹取名为CNT10,存放的路径为C:\Users\pp\Desktop\CNT10。
其次,项目的顶层文件名设置必须与编辑代码中的顶层模块名一致。
(2)将设计文件加入工程中。
单击File name栏后的控件,将与工程相关的Verilog文件加入工程;若没有编写相关Verilog文件,便单击Next进入下一步。
(3)选择目标芯片。
根据项目开发的硬件平台,选择与之相应的FPGA芯片。
首先在Device Family下拉列表中选择Cyclone系列,在引脚数目pin count中选择144,可快速筛选出符合条件得芯片型号。
(4)EDA工具设置。
此窗口中有三项选择:Design Entry/Synthesis用于选择输入的HDL类型和综合工具;Simulation用于选择仿真工具;Timing Analysis用于选择时序分析工具。
若不作选择,则默认选择Quartus II自含的EDA设计工具。
3.2 Verilog文本输入选择File->New命令,在New窗口中选择Verilog HDL File命令建立Verilog 文本,设置文件名为cnt10.v并存放在C:\Users\pp\Desktop\CNT10文件夹的根目录下。
实验名称:实验四:用verilog HDL输入法设计十进制计数器实验目的:硬件描述语言(HDL)就是可以描述硬件电路的功能、信号连接关系及定时(时序)关系的语言,也是一种用形式化方法来描述数字电路和设计数字系统的。
通过十进制计数器的设计,熟练掌握硬件描述语言的编程方法。
实验原理:module cout(clk,clear,qd,EN);input clk,clear,EN;output[3:0] qd;reg[3:0] cnt;assign qd=cnt;always @(posedge clk )begin if(clear ) cnt<=4'h0;//同步清0,高电平有效else if(EN)begin if(cnt==9) cnt<=4'h0;else cnt<=cnt+1; //加法计数endendEndmodule实验内容:为了能对此计数器进行硬件测试,应将其输入输出信号锁定在芯片确定的引脚上,编译后下载。
(1)选择Tools菜单中的Assignments项,即进入如图2-23所示的Assignment Editor编辑器窗。
在Category栏中选择Pin,或直接单击右上侧的Pin按钮。
(2)双击“TO”栏的《new》,在出现的如图2-24所示的下拉栏中分别选择本工程要锁定的端口信号名;然后双击对应的Location栏的《new》,在出现的下拉栏中选择对应端口信号名的器件引脚号,如对应CQ[3],选择42脚。
在此选择GW48-EDA系统的电路模式No.5,通过查阅附录有关”芯片引脚对照表”,GWAC3板确定引脚分别为:主频时钟clk接Clock0(第93脚,可接在4Hz上);计数使能EN可接电路模式No.5的键1(PIO0对应第1脚);复位clear则接电路模式No.5的键2(PIO1对应第2脚,注意键序与引脚号码并无对应关系);4位输出数据总线CQ[3..0]可由数码1来显示,通过分别接PIO19、PIO18、PIO17、PIO16(它们对应的引脚编号分别为42、41、40、39)。
实验二十进制计数器实验该实验将使用Verilog 硬件描述语言在DE2-70 开发平台上设计一个基本时序逻辑电路——1 位十进制计数器。
通过这个实验,读者可以了解使用Quartus 工具设计硬件的基本流程以及使用Quartus II 内置的工具进行仿真的基本方法和使用SignalTap II 实际观察电路运行输出情况。
SignalTap II 是Quartus 工具的一个组件,是一个片上的逻辑分析仪,可以通过JTAG 电缆将电路运行的实际输出传回Quartus 进行观察,从而省去了外界逻辑分析仪时的很多麻烦。
实验步骤3.1建立工程并完成硬件描述设计1. 打开Quartus II 工作环境,如图3-1 所示。
图3-1 Quartus II工作环境界面2. 点击菜单项File->New Project Wizard 帮助新建工程。
参看图3-2。
图3-2 选择New Project Wizard打开Wizard 之后,界面如图3-3 所示。
点击Next,如图3-3。
第23 页共208 页图3-3 New Project Wizard界面3. 输入工程工作路径、工程文件名以及顶层实体名。
这次实验会帮助读者理解顶层实体名和工程名的关系,记住目前指定的工程名与顶层实体名都是Counter10,输入结束后,如图3-4 所示。
点击Next。
图3-4输入设计工程信息4. 添加设计文件。
界面如图3-5 所示。
如果用户之前已经有设计文件(比如.v 文件)。
那么再次添加相应文件,如果没有完成的设计文件,点击Next 之后添加并且编辑设计文件。
图3-5添加设计文件5. 选择设计所用器件。
由于本次实验使用Altera 公司提供的DE2-70 开发板,用户必须选择与DE2-70 开发板相对应的FPGA 器件型号。
在Family 菜单中选择Cyclone II,Package 选FBGA,Pin Count 选896,Speed grade 选6,确认Available devices 中选中EP2C70F896C6,如图3-6。
图3-6选择相应器件6. 设置EDA 工具。
设计中可能会用到的EDA 工具有综合工具、仿真工具以及时序分析工具。
本次实验中不使用这些工具,因此点击Next 直接跳过设置。
如图3-7。
图3-7设置EDA工具7. 查看新建工程总结。
在基本设计完成后,Quartus II 会自动生成一个总结让用户核对之前的设计,如图3-8 所示,确认后点击Finish 完成新建。
图3-8新建工程总结在完成新建后,Quartus II 界面中Project Navigator 的Hierarchy 标签栏中会出现用户正在设计的工程名以及所选用的器件型号,如图3-9 所示。
图3-9观察正在设计的工程8. 培养良好的文件布局。
点击菜单项Assignments->Device,选中Compilation Process Settings 选项卡,勾上右边的Save Project output files in specified directory,输入路径(一般为debug 或者release),如图3-10 所示。
注意:使用相对路径.\release,以便将工程文件拷贝在不同的PC机上运行。
图3-10 指定单独的编译结果文件目录(相对路径)9. 添加所需设计文件。
点击菜单项File->New 或者点击图标新建一个设计文件,选择Verilog HDL File,如图3-11 所示,点击OK。
建立Verilog 源代码文件。
图3-11 选择设计文件类型输入如下Verilog HDL 语言的设计代码:10. 保存设计。
点击菜单项File->Save、点击图标或者使用快捷键Ctrl+S 保存设计,如图3-12 所示。
给设计文件命名Counter,与模块名相同,注意不是Counter10,点击保存。
图3-12 保存设计文件11. 分析与综合。
点击菜单项Processing->start->Start Analysis & Synthesis、点击图标或者使用快捷键Ctrl+K 执行分析与综合。
参看图3-13。
图3-13 执行start Analysis & Synthesis(开始分析与综合)分析与综合完成后,编译出错,错误原因如图3-14 所示。
图3-14 分析与综合错误原因顶层实体Counter10 未在源码中定义,必须更改顶层实体为Counter,这在多文件的工程中经常需要用到。
将左侧的 Project Navigator 切到 Files 标签,对着 Counter.v 文件右击,选择S et asTop-Level Entity,如图3-15。
图3-15 重新指定顶层实体12. 重新执行分析与综合,结果如图3-16,出现了12 个警告,这是因为qsf 文件中记录的顶层实体在这一步执行时还未更新。
图3-16 分析与综合结果(第二次执行)如果再次执行分析与综合,无论你是否删掉原先的编译结果,都会完全成功,如图3-17。
图3-17 分析与综合结果(第三次执行)3.2电路仿真13. 功能仿真。
它是为了检查设计是否在理论上达到预期功能,该仿真不考虑期间实际物理特性。
首先创建仿真输入波形文件。
仿真时需要对顶层实体的输入管脚提供激励信号,在Quartus 软件中可以通过波形文件方便的输入。
点击菜单项File->New->Vector Waveform File,如图3-18 所示。
图3-18 创建波形文件14. 添加信号结点。
在空波形文件中点击右键,如图3-19 进行选择(或者直接双击)。
图3-19 添加结点右键菜单单击Insert Node or Bus 后,出现如图3-20 所示对话框。
图3-20 添加结点对话框选择Node Finder 按钮可以从结点列表中选择我们需要的,而避免一个一个输入结点的麻烦。
实验二 十进制计数器实验图 3-21 Node Finder 对话框Fitter 选择 Pin:all ,点击 List 按钮。
出现如图 3-22 所示的结点列表。
图 3-22 结点列表简单起见,可以直接点>>按钮,将所有结点加入右侧 Select Nodes 栏中。
完成后如图 3-23 所示。
点击 OK 按钮确认。
图3-23 添加结点到右侧点击OK 后返回添加结点对话框。
如图3-24 所示。
图3-24 添加结点后的对话框点击OK 确定,波形文件将如图3-25 所示。
图3-25 波形文件15. 将iclk 设为方波。
右击iclk 信号,选择value->clock..,如图3-26 所示。
图3-26 将iclk改为方波在弹出的clock 设定对话框中把周期调整为20ns,如图3-27。
Duty cycle 的意思是占空比,即是指高电平在一个周期之内所占的时间比率。
图3-27 时钟的周期设置16. 将rst_n 改成低20ns 后持续高电平。
选中rst_n 信号,单击左侧图标强制设为高电平。
在波形上拖动鼠标选中前20ns,单击左侧图标强制设为低电平。
完成后波形如图3-28 所示。
输出波形可不管。
图3-28 波形文件17. 保存波形文件counter.vwf,如图3-29,这里的命名可以随意。
图3-29 保存波形文件18. 波形文件生成后,直接点击仿真按钮会提示错误,见图3-30,这是因为没有先产生功能仿真网表。
图3-30 未生成网表错误19. 要生成功能仿真网表,首先设置仿真模式。
点击菜单项Assignment->Settings,选中Simulator Settings 选项卡,出现图3-31 所示对话框。
在Simulation mode 中选择Functional,Simulation input 选择刚才建立的波形文件,完成后点击OK。
图3-31 仿真模式设置对话框点击菜单项Processing->Generate Functional Simulation Netlist,产生功能仿真所需的网表,参看图3-32。
完成后结果显示如图3-33。
图3-32 生成功能仿真网表的操作菜单项图3-33 功能仿真网表产生结果显示图20. 点击菜单项Processing->Start Simulation 或工具按钮启动功能仿真。
如图3-34,完成后结果显示如图3-35。
图3-34 仿真菜单项与按钮图3-35 仿真结果21. 配置引脚。
仿真完成后,确认功能正确后,可以进行分配引脚的操作。
根据所提供的DE2-70 用户指导手册,将计数器的q 输出配置到DE2-70 开发板的 4 个绿LED(LEDG[3]-LEDG[0])上,overflow 接LEDG[4],rst_n 接KEY[0],clk 接开关SW[0]。
(参考实验一)参考图3-36,注意Y24 不是V24。
图3-36 分配引脚图注意:clock相关:DE2_70开发板没有办法直接输出低频方波,使用开关手动控制。
标或使用CTRL+L 执行全编译,如图3-37 所示。
图3-37 执行start compilation编译结果如图3-38 所示。
图3-38 全编译结果显示23. 时序仿真。
其主要用途是查看实际设计的电路运行时是否满足延时要求,时序仿真考虑了电路实际运行的延时等因素。
单击菜单中Assignment->Settings,选中Simulator Settings 选项卡,在Simulation mode中选择Timing,Simulation input 选择刚才建立的波形文件,完成后点击OK,如图3-39。
图3-39 仿真模式设置对话框(时序仿真)特别注意:图3-31 和图3-39 区别了功能仿真和时序仿真。
如果是8.0 版,在左侧带问号的Quartus II Simulator (Timing)处右击start,启用时序仿实验二十进制计数器实验真,如图3-40A.图3-40A 启用时序仿真如果是7.2 版,由于没有Tasks 窗口,需要在Processing->Start 菜单按照A―E的步骤执行。
如图3-40B 所示。
每一步骤完成会弹出一个对话框,单击OK 或者确定。
图3-40B 时序仿真的后五步操作图解仿真结果如图3-41 与3-42 所示。
图3-41 仿真结果图图3-42 时序仿真波形24. 将设计下载在 FPGA 中。
完成设计后就可以下载到板上实际运行,点击菜单项Tools->Programmer 或点击图标打开程序下载环境。
点击start 开始下载。
(参考实验一)25. 手工拨动SW[0],测试实验结果。