用verilog HDL语言设计可逆计数器。

合集下载

用verilog HDL语言设计可逆计数器。

用verilog HDL语言设计可逆计数器。

西安邮电学院
实验报告书
系部名称:电子工程学院学生姓名:xxx
专业名称:xxxx
班级:xxxx
实验时间:2011 年11月17日
1、掌握可逆计数器的工作原理。

2、学习用verilog HDL语言设计可逆计数器。

二、实验设备:
计算机一台,TD-EDA实验箱一台
三、实验内容:
用verilog HDL语言设计可逆计数器并进行仿真、引脚分配及下载到电路开发板进行功能验证。

四、实验程序:
module keni8(clk,enable,sum,col);
input clk,enable;
output[7:0] sum;
reg[7:0] sum;
output col;
reg col;
always @(posedge clk )
if(enable==1)
sum=sum+1;
else if(enable==0)
sum=sum-1;
else if(sum >= 8)
begin
sum=0;
col=1;
end
endmodule
五、运行结果:
1、在编程过程中,需小心谨慎,特别是注意标点符号的标注。

2、实验结果有一定的延时。

3、实验前需对TD-EDA实验箱进行了解,这样可以使实验更有效率。

模可变计数器设计(Verilog语言)解答

模可变计数器设计(Verilog语言)解答

模可变计数器设计(一)实验目的1、进一步熟悉实验装置和Quartus n软件的使用;2、进一步熟悉和掌握EDA 设计流程;3 、学习简单组合、时序电路的EDA 设计;4、学习计数器中二进制码到BCD 码的转换技巧;5、学习实验装置上数码管的输出方法。

(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA 实验装置上实现模可变计数器功能,具体要求如下:1 、设置一个按键控制改变模值,按键按下时模为10-99 之间(具体数值自行确定)的数,没按下时模为100-199 之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。

(三) 主要仪器设备3、微机 1 台4、QuartusII 集成开发软件 1 套5、EDA 实验装置 1 套(四) 实验步骤主要有三个模块1:一个模20 和模119 的计数器2:数码管的显示3:BCD 的调整源程序:module count (clk,m,en,rst,a,sel,SG,d);input clk,m,en,rst;output [7:0] SG;output [2:0] sel;output a;(* synthesis, keep *) reg clk1;(* synthesis, keep *) wire [3:0] gw,sw,bw;/*(* synthesis, keep *) */reg [3:0]a;reg [11:0] q;reg [11:0] model;reg [7:0] cnt,SG;reg [2:0] sel;reg [0:0]d;output [0:0]d;always @(posedge clk) begin cnt=cnt+1;if (cnt==200) begin clk1=1'b1; cnt=0; endelse clk1=1'b0; //200 分频,CLK 为数码管扫描频率,CLK1 为计数频率if (sel<2) sel=sel+1; else sel=0; end //sel 为数码管选择always @(sel) begincase (sel)0: a=bw; //0 数码管为百位1: a=sw; //1 数码管为十位2: a=gw; //2 数码管为个位default: a=0;endcasecase (a)0:SG<=8'b00111111; 1:SG<=8'b00000110;2:SG<=8'b01011011; 3:SG<=8'b01001111;4:SG<=8'b01100110; 5:SG<=8'b01101101;6:SG<=8'b01111101; 7:SG<=8'b00000111;8:SG<=8'b01111111; 9:SG<=8'b01101111; //8 段译码值default: SG=8'b11111111;endcase endalways @(m)if (m) model=12'b000000100000; // 模值20else model=12'b000100011001; // 模值119assign gw=q[3:0];assign sw=q[7:4];assign bw=q[11:8];always @(posedge clk1,negedge rst)beginif (!rst) q=0;else if (en)beginif (q<model)beginif (gw==9) begin q=q+7; if (sw==9) q=q+96; end //BCD 调整else q=q+1;endelse q=0;endendalways @(q)if(qvmodel) d<=0; else d<=1; endmodule波形仿真:iimulatioin WaveformsSimulation sode : TillingA.B Master Time Sar19L9 ns ■[POinler: 39.3^1 us Imeival:39.32 us Stan :End:he. 14 us 37.. 42 UH 33. 7 us39.9B LLS4k 26 us54 us 4X B2 usP 1 i111■Clk1是计数频率,每来一个 clk1信号q 计数一次Simula ion Wa^efor™ Sinulatlon lode: Tiling如图所rst=1有效时开始计数 clk 为扫描频率sel=0时数码管显示百位 a=0 sel=1时数码管显示十位 a=1 sel=2时数码管显示个位 a=3 m=1模20计数器 m=0模119计数器管脚分配:* I HI Ik * Jij19.3ns J hRoirter.6fl.H us Interval.68.09 UE Slarl End.lane<>0□ S&elk<>1B clkl曲+ 0-L玮tT IF Len^1.nCH- 1±1 sei尬1.田Q B i辭El 勿u 3.dM68.14 us63.16 us ■6E. 18 usI63.22 us 68. 24 usW [1] X [3]连[01 X [1] X [3]迪[0] X [1] X [3] ® [o] X [1] X [3]址[0] II :MasierTiiTiB Bar.68.12 usIIISG[0] SG[1] SG[2] SG[3] SG[4] SG[5] SG[6] SG[7] clkPIN_F13PIN_F14PIN_F15PIN_E15PIN_F16PIN_F17PIN_E18PIN_F18 PIN_C13en PIN_H8m rst sel[0] sel[1] sel[2] d[0] PIN_J9PIN_C5PIN_G18PIN_G17PIN_G16 PIN_G13(五)实验心得本实验主要是三大模块的编写,第一次的实验在老师给的参考代码下进行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够计数的模块,用m 来控制模值的变化m=1 时模值为20 m=0 时模值为119;二是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行BCD 调整,并且q 是一个是十二位的寄存器,通过把gw=q[3:0]; sw=q[7:4]; bw=q[11:8] 赋值的方法;一个个的显示在数码管上,由于clk 的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分配也是比较关键的!一开始我就把个位和百位显示的值搞反了序列信号发生和检测器设计(一)实验目的1、进一步熟悉EDA实验装置和Quartus n软件的使用方法;2 、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计。

同步可逆十进制计数器verilog代码

同步可逆十进制计数器verilog代码

同步可逆十进制计数器verilog代码以下是一个同步可逆十进制计数器的Verilog代码:```module sync_reversible_counter(input clk, // 输入时钟信号input reset, // 输入复位信号output reg [3:0] count // 输出计数器值);// 定义状态变量reg [2:0] state;// 初始化状态变量和计数器值initial beginstate = 3'b000;count = 4'b0000;end// 状态转移逻辑always @(posedge clk) beginif (reset) begin // 复位信号为高电平时,将状态变量和计数器值重置为初始值state <= 3'b000;count <= 4'b0000;end else begin // 否则进行状态转移操作case (state)3'b000: begin // 当前状态为000时,下一状态为001,计数器加1state <= 3'b001;count <= count + 1;end3'b001: begin // 当前状态为001时,下一状态为010,计数器加1state <= 3'b010;count <= count + 1;end3'b010: begin // 当前状态为010时,下一状态为011,计数器加1state <= 3'b011;count <= count + 1;end3'b011: begin // 当前状态为011时,下一状态为100,计数器加1state <= 3'b100;count <= count + 1;end3'b100: begin // 当前状态为100时,下一状态为101,计数器加1state <= 3'b101;count <= count + 1;end3'b101: begin // 当前状态为101时,下一状态为110,计数器加1state <= 3'b110;count <= count + 1;end3'b110: begin // 当前状态为110时,下一状态为111,计数器加1state <= 3'b111;count <= count + 1;end3'b111: begin // 当前状态为111时,下一状态为000,计数器加1state <= 3'b000;count <= count + 1;endendcaseendendendmodule```这个Verilog代码实现了一个同步可逆十进制计数器。

可逆计数器设计

可逆计数器设计

安康学院HDL数字系统课程设计报告书课题名称:可逆计数器设计姓名:学号:2009222407院系:电子与信息工程系专业:电子信息工程指导教师:时间:2011-12-19课程设计项目成绩评定表设计项目成绩评定表课程设计报告书目录设计报告书目录一、设计目的 (1)二、设计思路 (1)三、设计过程 (1)3.1、系统方案论证 (1)3.2、模块电路设计 (2)四、系统调试与结果 (5)五、主要元器件与设备 (5)六、课程设计体会与建议 (5)6.1、设计体会 (5)6.2、设计建议 (6)七、参考文献 (6)一、设计目的1、熟悉modelsim的基本操作和功能。

2、掌握modelsim实现仿真的流程。

3、掌握可逆计数器的设计思路。

4、了解可逆计数器的组成及工作原理。

5、熟悉可逆计数器的设计和制作。

二、设计思路1、设计抢答器电路。

2、设计可预置时间的定时电路。

3、设计报警电路。

4、设计时序控制电路。

三、设计过程3.1、系统方案论证数字抢答器总体方框图如图1所示。

图 1 数字抢答器框图其工作原理为:接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置于“开始”状态,宣布“开始”抢答器工作。

定时器倒计时,扬声器给出声响提示。

选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。

当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。

如果再次抢答必须由主持人再次操作“清除”和“开始”状态开关。

3.2、模块电路设计抢答器电路如图2所示。

图2 数字抢答器电路该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。

工作过程:开关S 置于“清除”端时,RS 触发器的R 端均为0,4个触发器输出置0,使74LS148的ST =0,使之处于工作状态。

当开关S 置于“开始”时,抢答器处于等待工作状态,当有选手将键按下时(如按下S5),74LS148的输出,010012=Y Y Y ,0=EX Y 经RS 锁存后,1Q=1,BI =1,74LS48处于工作状态,4Q3Q2Q=101,经译码显示为“5”。

基于FPGA的可逆计数器的设计

基于FPGA的可逆计数器的设计

基于FPGA的可逆计数器的设计作者:牟晨淏黄铁文贺哲明袁申冯洪威王颖来源:《电脑知识与技术》2019年第07期摘要:为了实现可逆计数器的功能,以FPGA为基础,包含主控模块,数码管显示模块,来实现这个设计,通过设计顶层电路,程序编程,模块搭建,仿真运行,性能良好,故实现此功能以供展示。

关键词:FPGA;Verilog;计数器;数码管中图分类号:TP393 文献标识码:A文章编号:1009-3044(2019)07-0242-02开放科学(资源服务)标识码(OSID):既可加1计数又可减1计数的计数器叫作可逆计数器,也叫作双向计数器。

可逆计数器是可以进行正向和反向计数的这种计数器就是把加法计数器和减法计数器的作用合在一起,在逻辑线路上,对计数器的进位和借位脉冲进行适当的控制。

即用一个与或门把进位和借位脉冲加以控制,便构成可逆计数器。

1 原理FPGA是一种运用了逻辑单元阵列LCA的概念,其中包含了逻辑模块输入与输出并且还有IOB与内部连线这几个部分,其中门阵列是可以直接进行编程的器件,他与传统的门阵列进行比较时,会具有相对更小的查找表来实现组合逻辑,在每一个D触发器的输入端都会与一个查找表相互连接,其他的I/O口或者是逻辑电路都由触发器来驱动,这样就形成了一种既可以实现时序逻辑又可以实现组合逻辑功能的一个最基础的逻辑模块,这些模块之间通过金属线进行互相连接或者直接连接到I/O口。

在FPGA中逻辑是由静态单元运行编程数据后来实现的。

各模块或模块与I/O口间的相互连接方式是由存储器单元中的值来决定了逻辑功能,最后呈现出所需要的功能。

分别含有的两个模块一个是数码管模块,一个是主要程序模块。

2 总设计图设计要求及原理:计数器是一种在实践课程中运用较多的一个时序逻辑器件,它的基本功能是统计时间脈冲在一定时间内的个数,从而实现对脉冲实现技术的功能,它的工作原理可以大概论为:在上升或者下降沿到来时,二进制数据在低一位进行自加或自减。

用Verilog HDL设计2位16进制计数器

用Verilog HDL设计2位16进制计数器

基于FPGA的系统设计与应用实验二计数器设计实验一、实验目的:学习计数器的设计、仿真和硬件测试方法。

二、实验内容及步骤:1.用Verilog HDL设计2位16进制计数器,由DE2的KEY0输入计数值,在HEX1,HEX0上显示计数值。

2.使用嵌入式逻辑分析仪进行仿真;3.将实验程序下载到DE2运行。

实验注意事项:去抖动三、程序代码module lib22(out1,out2,clk,rst,key);output [6:0] out1,out2;input clk,rst;input key;reg [19:0]count;reg [7:0]in;reg [6:0]out1,out2;reg C,K;reg [9:0] r1;always@(posedge clk)if(count==20'd5000)beginC=~C;count<=1'b0;endelsecount=count+1'b1;always @ (posedge C)beginif(r1<10'd1000)beginK<=1'b0;r1<=r1+1'b1;endelsebeginK<=1'b1;r1<=1'b0;endendalways @ (posedge C,negedge rst) if(!rst)in<=1'b0;else if(!K)beginin=in+8'b1;endalways @ (in[3:0])case(in[3:0])4'b0000:out1=7'b1000000;4'b0001:out1=7'b1111001;4'b0010:out1=7'b0100100;4'b0011:out1=7'b0110000;4'b0100:out1=7'b0011001;4'b0101:out1=7'b0010010;4'b0110:out1=7'b0000010;4'b0111:out1=7'b1011000;4'b1000:out1=7'b0000000;4'b1001:out1=7'b0010000;4'b1010:out1=7'b0001000;4'b1011:out1=7'b0000011;4'b1100:out1=7'b1000110;4'b1101:out1=7'b1100001;4'b1110:out1=7'b0000110;4'b1111:out1=7'b0001110;default:out1=7'b1111111; endcasealways @ (in[7:4])case(in[7:4])4'b0000:out2=7'b1000000;4'b0001:out2=7'b1111001;4'b0010:out2=7'b0100100;4'b0011:out2=7'b0110000;4'b0100:out2=7'b0011001;4'b0101:out2=7'b0010010;4'b0110:out2=7'b0000010;4'b0111:out2=7'b1011000;4'b1000:out2=7'b0000000;4'b1001:out2=7'b0010000;4'b1010:out2=7'b0001000;4'b1011:out2=7'b0000011;4'b1100:out2=7'b1000110;4'b1101:out2=7'b1100001;4'b1110:out2=7'b0000110;4'b1111:out2=7'b0001110;default:out2=7'b1111111; endcaseendmodule四、实验原理图:DE2按键电路图五、实验总结与分析:1.不加去斗时,出现的结果不稳定,不同的DE2板子结果不一样,在加上去斗时,实验结果很稳定;2.去斗可以是检测抖动阶段也可以是不抖动阶段;3.实验二包含了实验一的一些内容,例如数码管的显示,但是加了去抖动程序,使结果更加的稳定。

verilog计数器设计原理

verilog计数器设计原理

Verilog计数器设计原理1. 介绍计数器是一种常见的数字电路,用于计算和记录事件的数量。

在数字系统中,计数器通常用于生成时钟信号、控制状态机、实现频率分频等应用。

Verilog是一种硬件描述语言,可以用于设计和仿真数字电路。

本文将详细介绍与Verilog计数器设计相关的基本原理。

2. 计数器的基本概念计数器是一种能够在输入脉冲信号的作用下进行累加或递减操作的数字电路。

它通常由触发器和逻辑门组成,触发器用于存储和传递数据,逻辑门用于控制触发器的工作状态。

2.1 同步计数器同步计数器是通过时钟信号来同步各个触发器的状态转换,以实现数据的累加或递减操作。

它包含一个时钟输入端(CLK)和一个复位输入端(RST)。

2.1.1 同步正向计数器同步正向计数器是最简单的同步计数器之一,它能够在每个上升沿时钟信号到达时进行累加操作。

2.1.1.1 原理同步正向计数器由多个触发器和逻辑门组成,其中每个触发器都有一个时钟输入端和一个复位输入端。

当时钟信号的上升沿到达时,触发器的状态将根据输入信号进行更新。

具体的原理如下:1.初始化:将计数器的初始值设置为0。

2.时钟边沿检测:当时钟信号的上升沿到达时,进入下一步操作。

3.累加操作:根据触发器的当前状态进行累加操作。

如果触发器为0,则变为1;如果触发器为1,则变为0。

4.检测溢出:如果最高位触发器由1变为0,则表示计数溢出,需要将其他低位触发器进行进位操作。

2.1.1.2 Verilog代码示例以下是一个4位同步正向计数器的Verilog代码示例:module synchronous_counter(input wire clk,input wire rst,output wire [3:0] count);reg [3:0] count;always @(posedge clk or posedge rst)beginif (rst)count <= 4'b0000;elsecount <= count + 1;endendmodule2.1.2 同步递减计数器同步递减计数器是同步正向计数器的一种扩展,它能够在每个上升沿时钟信号到达时进行递减操作。

十进制可逆加减计数器

十进制可逆加减计数器

时序电路逻辑设计实验人:周铮班级:中法1202班学号:U201215676一实验目的1.掌握用SSI实现简单组合逻辑电路的方法。

2.掌握简单数字电路的安装与测试技术。

3.熟悉使用Verilog HDL描述组合逻辑电路的方法,以及EDA仿真技术。

二实验器件计算机,可编程实验板三实验内容十进制加减可逆计数器设计功能要求:拨码开关键SW1为自动可逆加减功能键,当SW1为HIGH时,计数器实现自动可逆模十加减计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9—8—7—...0—1...的模十自动可逆加减计数结果;当SW1为LOW时,计数器按拨码开关键SW0的选择分别执行加减计数功能。

即当SW0为HIGH时,计数器实现模十加计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9——0—1...的模十加计数结果;当SW0为LOW时,计数器实现模十减计数功能,即4个七段数码管上几乎同步显示9—8—7—...—1—0— (9)—8—7…的模十减计数结果。

四实验设计1.原理设计脉冲发生电路采用555定时器组成的多谐振荡器振荡产生周期为1s的矩形脉冲,从而为计数器提供触发信号。

其中,可以通过R1,R2,C来控制充放电的时间。

加/减计数控制电路主要由74LS138构成。

74LS138芯片是常用的3-8线译码器,常用在单片机和数字电路的译码电路中,74LS138的引脚排列及真值表如图计数单元电路主要由十进制计数器74LS192构成。

74LS192是同步十进制可逆计数器,它具有双时钟输入,并具有清除和置数等功能,其引脚排列图如图功能表如图2.模拟仿真用Verilog HDL语言设计二通道数据选择器实验程序如下:①实验代码module a(input clk,input SW1,input SW0,input clear,input reset,output reg[3:0] s1_reg,output reg[6:0] segdat_reg);reg[26:0] counter;reg[3:0]q;reg x;always@(posedge clk)beginif(clear) begins1_reg<=0;counter<=0;endelsecounter<=counter+1;endalways@(posedge counter[26])beginif (reset) beginq<=0;x<=0;endelsebegincase(SW1)1'd1:begincase(x)1'd0: beginif(q==4'd8)x<=1;q<=q+1;end1'd1: beginif(q==4'd1)x<=0;q<=q-1;endendcaseend1'd0:begincase(SW0)1'd0:beginif(q==4'd0)q<=4'd9;elseq<=q-1;end1'd1:beginif(q==4'd9)q<=4'd0;elseq<=q+1;endendcaseendendcaseendendalways@(q) // 数码管显示处理begincase(q)4'h0:segdat_reg = 7'b0000001; //04'h1:segdat_reg = 7'b1001111; //14'h2:segdat_reg = 7'b0010010; //24'h3:segdat_reg = 7'b0000110; //34'h4:segdat_reg = 7'b1001100; //44'h5:segdat_reg = 7'b0100100; //54'h6:segdat_reg = 7'b0100000; //64'h7:segdat_reg = 7'b0001111; //74'h8:segdat_reg = 7'b0000000; //84'h9:segdat_reg = 7'b0000100; //9default:segdat_reg=7'b0111000; //Fendcaseendendmodule②测试文件test代码module test;// Inputsreg clk;reg SW1;reg SW0;reg clear;reg reset;// Outputswire [3:0] s1_reg;wire [6:0] segdat_reg;// Instantiate the Unit Under Test (UUT)a uut (.clk(clk),.SW1(SW1),.SW0(SW0),.clear(clear),.reset(reset),.s1_reg(s1_reg),.segdat_reg(segdat_reg));initial begin// Initialize Inputsclk = 0;SW1 = 0;SW0 = 1;clear = 1;reset = 1;// Wait 100 ns for global reset to finish#100;// Add stimulus hereendendmodule③管脚设置ucf文件代码# PlanAhead Generated physical constraintsNET "SW0" LOC = P11;NET "SW1" LOC = L3;NET "clear" LOC = K3;NET "clk" LOC = B8;NET "reset" LOC = B4;NET "segdat_reg[0]" LOC = M12;NET "segdat_reg[1]" LOC = L13;NET "segdat_reg[2]" LOC = P12;NET "segdat_reg[3]" LOC = N11;NET "segdat_reg[4]" LOC = N14;NET "segdat_reg[5]" LOC = H12;NET "segdat_reg[6]" LOC = L14;NET "s1_reg[0]" LOC = F12;NET "s1_reg[1]" LOC = J12;NET "s1_reg[2]" LOC = M13;NET "s1_reg[3]" LOC = K14;# PlanAhead Generated IO constraintsNET "clk" SLEW = FAST;④模拟仿真顶层原理图⑤模拟仿真波形图五实验心得本次实验要求用Verilog HDL语言做出十进制可逆加减计数器并进行模拟仿真,其中在代码部分出现多次bug,后经过仔细检查发现是测试文件未加限制的原因,最终做出了模拟仿真。

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

西安邮电学院
实验报告书
系部名称:电子工程学院学生姓名:xxx
专业名称:xxxx
班级:xxxx
实验时间:2011 年11月17日
1、掌握可逆计数器的工作原理。

2、学习用verilog HDL语言设计可逆计数器。

二、实验设备:
计算机一台,TD-EDA实验箱一台
三、实验内容:
用verilog HDL语言设计可逆计数器并进行仿真、引脚分配及下载到电路开发板进行功能验证。

四、实验程序:
module keni8(clk,enable,sum,col);
input clk,enable;
output[7:0] sum;
reg[7:0] sum;
output col;
reg col;
always @(posedge clk )
if(enable==1)
sum=sum+1;
else if(enable==0)
sum=sum-1;
else if(sum >= 8)
begin
sum=0;
col=1;
end
endmodule
五、运行结果:
1、在编程过程中,需小心谨慎,特别是注意标点符号的标注。

2、实验结果有一定的延时。

3、实验前需对TD-EDA实验箱进行了解,这样可以使实验更有效率。

相关文档
最新文档