Verilog10进制计数器电路
FPGA实验二:基于HDL的十进制计数器

《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.生成下载配置文件,下载到开发板进行经行验证。
Verilog10进制计数器电路

练习设计一个10进制计数器电路,把10进制计数器的计数结果送到一位数码管显示,要求计数器的计数频率为1Hz。
系统时钟为25MHz,要求系统同步复位,高电平有效。
完成电路设计框图,各模块仿真以及系统功能仿真和下载编程。
分频器:module fenpin25(clk,rst,clk_1hz);input clk;input rst;output clk_1hz;reg clk_1hz;reg [23:0] cnt;always@(posedge clk or posedge rst)beginif(rst==1'b1)cnt<=24'd0;else if(cnt==13107119)begincnt<=24'd0;clk_1hz<=~clk_1hz;endelsecnt<=cnt+1;endendmodule十进制计数器:module cnt10(rst,clk,cnt);input rst,clk;output [3:0] c nt;reg [3:0] c nt;always@(posedge clk)beginif(rst==1'b0)cnt<=4'b000;else if(cnt==4'd9)cnt<=4'b000;elsecnt<=cnt+1;endendmodule十进制计数器仿真波形图:LED译码器:module qiduan(cnt,led,scan); input [3:0] c nt;output [6:0] l ed;output [3:0] s can;reg [6:0] l ed;wire [3:0] s can;assign scan=4'b0001;always@(cnt)begincase(cnt)4'b0001:led=7'b0000110;4'b0010:led=7'b1011011;4'b0011:led=7'b1001111;4'b0100:led=7'b1100110;4'b0101:led=7'b1101101;4'b0110:led=7'b1111100;4'b0111:led=7'b0000111;4'b1000:led=7'b1111111;4'b1001:led=7'b1101111;4'b1010:led=7'b1110111;default:led=7'b0111111;endcaseendendmoduleLED译码器仿真波形图:顶层电路Verilog HDL代码:module cnt10led(rst,clk,led,scan);input rst;input clk;output [6:0] l ed;output [3:0] s can;wire [3:0] c nt;wire [6:0] l ed;wire [3:0] s can;fenpin25 u0(.clk(clk),.rst(rst),.clk_1hz(clk_1hz)); cnt10 u1(.clk(clk_1hz),.rst(rst),.cnt(cnt)); qiduan u2(.cnt(cnt),.led(led),.scan(scan));endmodule框图:。
实验四-模10计数器与10分频电路

●实验名称:利用VerilogHDL设计一个模10加法计数器和一个时钟10分频电路●实验目的:1.熟悉用可编程器件实现基本时序逻辑电路的方法。
2.了解计数器的Verilog描述方法,以及偶数分频的思路与原理。
●预习要求:1.回顾数字电路中加法计数器的相关知识。
●实验说明:1.用MAX+plus II软件开发PLD器件有两种设计输入方式:原理图输入和HDL语言输入方式,或者将两者结合起来,一部分电路采用原理图,另一部分采用HDL语言。
2.加法计数器表示随着时钟脉冲的输入,计数器从0开始正向计数,直到计满规定的模值后归零,然后依次循环计数。
模10计数器表示,计数器从0000~1001循环计数。
3.时钟分频电路的功能是,对输入的时钟频率进行偶数倍的降频(倍增其周期),10分频意味着分频后产生的新时钟周期是输入时钟的20倍。
●实验内容与步骤:1.新建一个属于自己的工程目录。
2.用VerilogHDL语言方式编写一个模10加法计数器cnt_10。
3.对此计数器模块进行编译和仿真。
4.用VerilogHDL语言方式编写一个20分频模块fenpin_20,对输入时钟进行20分频处理。
5.对此分频电路进行仿真。
●实验报告要求:1.将自己绘制的电路图或者编写的VerilogHDL代码,截图或者复制到实验报告中。
2.将代码关键位置写上相应注释(可用中文)。
3.对仿真波形截图,贴到实验报告中。
●实验图表与数据:1. 模10加法计数器cnt_10的V erilog代码2. 模10加法计数器cnt_10的仿真波形:3. 20分频模块fenpin_10的Verilog代码:4. 20分频模块fenpin_10的仿真波形:。
实验六Verilog设计分频器计数器电路

实验六Verilog设计分频器/计数器电路一、实验目的1进一步掌握最基本时序电路的实现方法;2学习分频器/计数器时序电路程序的编写方法;3进一步学习同步和异步时序电路程序的编写方法。
二、实验内容1、用Verilog设计一个10分频的分频器,要求输入为clock(上升沿有效),reset(低电平复位),输出clockout为5个clock周期的低电平,5个clock周期的高电平),文件命名为fenpinqi10.v。
2、用Verilog设计一异步清零的十进制加法计数器,要求输入为时钟端CLK(上升沿)和异步清除端CLR(高电平复位),输出为进位端C和4位计数输出端Q,文件命名为couter10.v。
3、用Verilog设计8位同步二进制加减法计数器,输入为时钟端CLK(上升沿有效)和异步清除端CLR(低电平有效),加减控制端UPDOWN,当UPDOWN为1时执行加法计数,为0时执行减法计数;输出为进位端C和8位计数输出端Q,文件命名为couter8.v。
4、用VERILOG设计一可变模数计数器,设计要求:令输入信号M1和M0控制计数模,当M1M0=00时为模18加法计数器;M1M0=01时为模4加法计数器;当M1M0=10时为模12加法计数器;M1M0=11时为模6加法计数器,输入clk上升沿有效,文件命名为mcout5.v。
5、VerilogHDL设计有时钟时能的两位十进制计数器,有时钟使能的两位十进制计数器的元件符号如图所示,CLK是时钟输入端,上升沿有效;ENA是时钟使能控制输入端,高电平有效,当ENA=1时,时钟CLK才能输入;CLR是复位输入端,高电平有效,异步清零;Q[3..0]是计数器低4位状态输出端,Q[7..0]是高4位状态输出端;COUT是进位输出端。
三、实验步骤:第一个实验:1、打开QuartusII,新建一个工程f_fenpinq10yjq2、新建一个Verilog HDL文件3、输入程序:module fenpinqi10(clk,reset,clkout);input clk,reset;output clkout;reg clkout;reg[2:0] cnt;always @(posedge clk , negedge reset)beginif(!reset)begin clkout<=0;cnt<=0;endelse if(cnt==4)begin cnt<=0;clkout<=~clkout;endelse cnt<=cnt+1;endendmodule4、设置顶层实体名(点settings>general >下拉选fenpinqi10)5、编译6、执行file>Create/Update>Create Symbol Files for Current Flie为VHDI设计文件生成原件符号7、建立波形文件8、导入引脚9、仿真结果如下:总结:仿真结果与实验一的题意相符,所以仿真正确。
Verilog_HDL十进制计数器实验Quartus90非常详细的步骤

实验二十进制计数器实验该实验将使用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十进制计数器实验Quartus90非常详细的步骤

页 802 共 页 73 第 图击点、noitalipmoc trats>-gnissecorP 项单菜击点。件文译编全�后配分脚引成完 .22 。制控动手关开用使�波方频低出输接直法办有没板发开 07_2ED�关相 kcolc�意注 图脚引配分 63-3 图
绿个
。42V 是不 42Y 意注�63-3 图考参�一验实考 参�。]0[WS 关开接 klc�]0[YEK 接 n_tsr�]4[GDEL 接 wolfrevo �上�]0[GDEL-]3[GDEL� DEL 4 的板发开 07-2ED 到置配出输 q 的器数计将�册手导指户用 07-2ED 的供 提所据根。作操的脚引配分行进以可�后确正能功认确�后成完真仿。脚引置配 .12 果结真仿 53-3 图
为设制强 标图侧左击单�号信 n_tsr 中选。平电高续持后 sn02 低成改 n_tsr 将 .61
置设期周的钟时 72-3 图
。率比间时的占所内之期周个一在平电高指是即�比 空占是思意的 elcyc ytuD。72-3 图如�sn02 为整调期周把中框话对定设 kcolc 的出弹在 波方为改 klci 将 62-3 图
。件文计设辑编且并加添后之 txeN 击点�件文计设的成完有没果如�件文应相加添次再么那 验实器数计制进十 二验实
页 802 共 页 62 第 正户用现出会中栏签标 yhcrareiH 的 rotagivaN tcejorP 中面界 II sutrauQ�后建新成完在 结总程工建新 8-3 图
。建新成完 hsiniF 击点后认确�示所 8-3 图如�计设的前之对 核户用让结总个一成生动自会 II sutrauQ�后成完计设本基在。结总程工建新看查 .7 具工 ADE 置设 7-3 图
验实器数计制进十 二验实
基于VerilogHDL的10位超前进位加法器计教材

基于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 软件。
lab6_10进制计数器

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板的电源线和数据线,打开开关。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习
设计一个10进制计数器电路,把10进制计数器的计数结果送到一位数码管显示,要求计数器的计数频率为1Hz。
系统时钟为25MHz,要求系统同步复位,高电平有效。
完成电路设计框图,各模块仿真以及系统功能仿真和下载编程。
分频器:
module fenpin25(clk,rst,clk_1hz);
input clk;
input rst;
output clk_1hz;
reg clk_1hz;
reg [23:0] cnt;
always@(posedge clk or posedge rst)
begin
if(rst==1'b1)
cnt<=24'd0;
else if(cnt==13107119)begin
cnt<=24'd0;
clk_1hz<=~clk_1hz;
end
else
cnt<=cnt+1;
end
endmodule
十进制计数器:
module cnt10(rst,clk,cnt);
input rst,clk;
output [3:0] c nt;
reg [3:0] c nt;
always@(posedge clk)
begin
if(rst==1'b0)
cnt<=4'b000;
else if(cnt==4'd9)
cnt<=4'b000;
else
cnt<=cnt+1;
end
endmodule
十进制计数器仿真波形图:
LED译码器:
module qiduan(cnt,led,scan); input [3:0] c nt;
output [6:0] l ed;
output [3:0] s can;
reg [6:0] l ed;
wire [3:0] s can;
assign scan=4'b0001;
always@(cnt)
begin
case(cnt)
4'b0001:led=7'b0000110;
4'b0010:led=7'b1011011;
4'b0011:led=7'b1001111;
4'b0100:led=7'b1100110;
4'b0101:led=7'b1101101;
4'b0110:led=7'b1111100;
4'b0111:led=7'b0000111;
4'b1000:led=7'b1111111;
4'b1001:led=7'b1101111;
4'b1010:led=7'b1110111;
default:led=7'b0111111;
endcase
end
endmodule
LED译码器仿真波形图:
顶层电路Verilog HDL代码:
module cnt10led(rst,clk,led,scan);
input rst;
input clk;
output [6:0] l ed;
output [3:0] s can;
wire [3:0] c nt;
wire [6:0] l ed;
wire [3:0] s can;
fenpin25 u0(.clk(clk),.rst(rst),.clk_1hz(clk_1hz)); cnt10 u1(.clk(clk_1hz),.rst(rst),.cnt(cnt)); qiduan u2(.cnt(cnt),.led(led),.scan(scan));
endmodule
框图:。