文档视界 最新最全的文档下载
当前位置:文档视界 › Verilog机组实验计数器

Verilog机组实验计数器

计数器+ALU实验

实验内容

1、ALU实现及仿真

2、计数器实现及仿真

3、ALU+计数器综合实现及仿真

实验原理

1、A LU实现及仿真

使用Verilog HDL代码编程方式构建ALU181元件符号,生成ALU模块。

主要步骤:

(1)建立工程(注意工程名字和文件夹名字一致)

(2)编辑ALU181.v文件,并生成元件符号

(3)建立原理图文件,调用该元件符号

(4)编译

(5)波形仿真(不需引脚绑定)

2、计数器实现及仿真

(1)设计计数器Counter元件。通过.v文件构建元件符号Counter,生成计数器。(2)进行波形仿真

(3)进行引脚绑定,下载到实验箱进行验证。

3、ALU+计数器综合实现及仿真

(1)设计计数器Counter元件。通过.v文件构建元件符号Counter,生成计数器(2)设计ALU元件。通过.v文件构建元件符号ALU181

(3)计数器产生的信号S[3..0]作为ALU中S[3..0]的输入信号。

实验中程序运行结果及截图

实验心得

通过这次实验的学习。我们了解到了ALU和计数器的基本原理,通过自己动手实验,进一步了解了其基本结构在实际实验中是怎样发挥作用的。在实验的过程中,我和小组成员互相配合,共同摸索,虽然几经失败,但是最后在老师的帮助下发现了错误,并且加以改正,最后成功做出了实验,完成了一个简单的ALU+计数器。在此过程中,增强了动手能力,加深了理解,增进了友谊,是一次不可多得的宝贵的实验经历。

Verilog24小时计数器

VERILOG24小时多功能数字钟的设计 班级:自动化学生:XXXXX 学号:XXXXXX 1 设计目标 掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程; 熟悉一种EDA软件使用与实验系统介绍; 掌握Verilog HDL设计方法,设计一个多功能数字钟,满足以下要求: ①能显示小时、分钟、秒钟(小时以24进制,时、分用显示器,秒用LED); ②能调整小时、分钟的时间; ③复位; 2 实验装置 586计算机,MAX+plusⅡ 10.2软件,专用编程电缆,EDA Pro2K数字实验装置等。 3 设计步骤和要求 ①在MAX+plusⅡ 10.2软件中,输入设计的原理图,采用Verilog HDL输入方式,采用分层模块的设计方法设计电路 ②对电路进行仿真分析; ③选择器件,分配引脚,重新对设计项目进行编译和逻辑综合; ④对EDA Pro2K数字实验装置中的FPGA器件进行在系统编程,并实际测试电路的逻辑功能(用实验板上的译码显示电路显示结果); 4 具体步骤 4.1 建立 Quartus 工程; 1.打开 Quartus II 工作环境 2.点击菜单项 File->New Project Wizard 帮助新建工程 3.输入工程工作路径、工程文件名以及顶层实体名 4.添加设计文件 5.选择设计所用器件 6.设置EDA工具 7.查看新建工程总结 在完成新建后,Quartus II 界面中Project Navigator 的Hierarchy 标签栏中会出现用户正在设计的工程名以及所选用的器件型号 4.2 使用 Verilog HDL 完成设计输入 代码如下: (1)数字钟顶层模块:

verilog实验报告

verilog实验报告 Verilog实验报告 引言: Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。它是一种高 级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。 本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。 实验一:基本门电路设计 在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。 我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算 符和条件语句实现了与门的功能。然后,我创建了一个测试模块,用于验证与 门的正确性。通过输入不同的组合,我能够验证与门的输出是否符合预期。 接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。通 过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。 实验二:时序电路设计 在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变 其输出。 我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据 的存储和传输功能。然后,我创建了一个测试模块,用于验证寄存器的正确性。

通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。 接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。 我还添加了一个复位输入,用于将计数器的值重置为初始状态。通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。 通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。 实验三:组合电路设计 在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。 我首先设计了一个多路选择器模块,使用条件语句和逻辑运算符实现了多个输 入和一个选择信号之间的映射关系。然后,我创建了一个测试模块,用于验证 多路选择器的正确性。通过输入不同的数据和选择信号,我能够观察到多路选 择器的输出是否符合预期。 接下来,我设计了一个加法器模块,使用逻辑运算符和进位电路实现了两个二 进制数的相加功能。我还添加了一个溢出输出,用于指示是否发生了溢出。通 过测试模块,我能够验证加法器在不同的输入情况下是否正确地进行相加。 通过这个实验,我不仅学会了使用Verilog设计组合电路,还加深了对多路选择器和加法器的理解。 结论: 通过这些实验,我学会了使用Verilog进行数字电路的设计和模拟。Verilog作 为一种硬件描述语言,能够帮助工程师更轻松地进行数字电路的设计和验证。

verilog综合设计实验:计数器及译码器的总体设计源代码

综合实验二:计数器及译码器的总体设计 1. 实验说明: ● 本次试验采用层次化设计。 ● 设计的计数器模块的计数范围为0~7,具有异步清零,增或减的同步二进制计数功能。 ● 3-8线译码器模块不带使能端,其他逻辑功能同前面设计的3-8线译码器。 ● 采用modelsim 6.5软件进行测试。 2. 实验层次图: 3. 实验代码: (1) 计数器模块 ● 源代码:inp_countert.V module inp_2_counter(CP,CR,Q,Mod); inputCP,CR,Mod; //Mod=1,up counter; Mod=0,down counter output [2:0] Q; reg [2:0] Q; Y 7 Y 1 Y 0 ……

always @ (posedge CP or negedge CR) if(~CR)Q<=3'b000;//CR=0,asynchronousclear else if (Mod==1) Q<=Q+1'b1; else Q<=Q-1'b1; endmodule ●测试代码:test_inp_counter.V module test_inp_2_counter; regCP,CR,Mod; wire [2:0] Q; inp_2_counter u0(CP,CR,Q,Mod); initial begin CP=0;CR=0;Mod=1; #20 CR=1;Mod=1; #60 CR=0;Mod=1; #20 CR=1;Mod=1; #40 CR=1;Mod=0; #20 CR=0;Mod=1; end always #10 CP=~CP; endmodule ●测试结果:

verilog模4计数器实验报告

Lab 5 模4递增计数器 王阳IS1102班U201114066 1.实验目的 学会用Quartus 9.1编译Verilog语言的方法和步骤;设计简单的程序,并能运行;了解触发器,并学会利用触发器制作模4递增计数器。 2.实验内容 ●在模4递增计数器中,由cp时钟信号控制输入; ●由两个D触发器组合而得到模4递增计数器; ●简单的模4计数器由cp作为开关控制输入,由Q0和Q1两个LED灯控制输出。 3.代码分析 1)首先,定义module的输入输出接口; 2)然后,建立程序,分为模4递增计数器主块和D触发器块; 3)模4递增计数器的实现分为2个块,如下: 模4递增计数器块: module mo4(Q0,Q1,cp); output Q0,Q1; input cp; d_ff f0(Q0,~Q0,cp);//调用D触发器 d_ff f1(Q1,~Q1,Q0); //调用D触发器 endmodule D触发器块: module d_ff (Q,D,cp);//D触发器块 output Q; input D,cp; reg Q; always @(posedge cp) Q<=D; endmodule

4.实验步骤 1)连接DE0板:连接DE0板的电源线和数据线或直接将数据线接到电脑主机上,打 开开关。 2)创建项目:打开Quartus9.1软件,选择“File—>New Project Wizard”,在弹出的窗 口中输入项目的名称和存储位置。这里笔者将文件储存在桌面的临时文件夹中,并 取名为chufaqi\mo4,如下: 确定输入完成后,单击Next,出现下图:

verilog实验-计数器实验报告

v e r i l o g实验-计数器 实验报告 -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

计数器 1、实现目标及介绍 实验实现了一个简易的计数器,计数范围可达899(0~899),通过key4按键 计数,每按下一次,计数加一,百位数显示在led上,个位与十位显示在数码管上。为十进制计数,数码管1计数到九后置零。数码管2获得进位加一,数码管2到9后当再次获得个位进位时再次向百位进一,点亮led1,每百位点亮一个led。此外key4为清零键,可随时按键清零。 2、效果展示 计数99

清零 计数100

视频展示(双击观看)

3、代码实现与模块分析1.顶层模块

module jishuqi ( input wire clk,rst, eg_data_1 (cnt[7:4]), eg_data_2 (cnt[3:0]), eg_led_1 (segment_led_1), eg_led_2 (segment_led_2) lk (clk), .rst (rst), .key (key1), .key_pulse (key_pulse) ); endmodule 2.数码管显示模块 module segment (seg_data_1,seg_data_2,seg_led_1,seg_led_2); input [3:0] seg_data_1;键消抖模块 eg_data_1 (cnt[7:4]), eg_data_2 (cnt[3:0]), eg_led_1 (segment_led_1), eg_led_2 (segment_led_2) lk (clk), .rst (rst), .key (key1), .key_pulse (key_pulse) ); endmodule //按键消抖 module debounce (clk,rst,key,key_pulse); parameter N = 2; //要消除的按键的数量 input clk; input rst; input [N-1:0] key; //输入的按键output [N-1:0] key_pulse; //按键动作产生的脉冲 reg [N-1:0] key_rst_pre; //定义一个寄存器型变量存储上一个触发时的按键值 reg [N-1:0] key_rst; //定义一个寄存器变量储存储当前时刻触发的按键值 wire [N-1:0] key_edge; //检测到按键由高到低变化是产生一个高脉冲 //利用非阻塞赋值特点,将两个时钟触发时按键状态存储在两个寄存器变量中

浙工大verilog实验

实验三、4位二进制计数器 一、实验目的 (1) 熟悉利用Model Sim软件进行功能仿真,掌握其设计方法和软件的应用。 (2) 掌握4位二进制计数器的程序代码及工作原理。 二、实验原理 设计具有同步置数、异步复位功能的4位二进制计数器。data是4位数据输入端,out是4位数据输出端,clk和rst是时钟信号和复位信号,load是置数端。当load有效时,停止计数,data的数据被赋给out。 三、实验步骤 1.创建工程。建立.mpf后缀的工程文件,建立库并将逻辑库映射到物理目录。 2.编译设计文件。编写4位二进制计数器的Verilog 程序,进行语法检查并完成编译。 模块文件如下: module count4(out,data,load,clk,rst); //定义模块count4,存放于count4_v文件output[3:0]out; //计数器输出信号 input[3:0]data; //计时器输入信号 input load,clk,rst; //计数器的置数端,时钟信号,复位信号 reg[3:0]out; always@(posedge clk or negedge rst) //clk上升沿或者rst下降沿触发 if(!rst) out=4'b0; //异步复位

else if(load) out=data; //同步复位 else out=out+1; endmodule Testbench激励文件如下: `timescale 10ns/1ns module count4_tp; //testbench激励模块的名字,放在count4_tp.v文件reg[3:0]data; //测试输入信号定义为reg寄存器类型 reg load,clk,rst; wire[3:0]out; //测试输出信号定义为wire类型count4 mycount(out,data,load,clk,rst); //实例化被测模块count4 initial clk=0; //初始化时钟信号 always //always语句产生时钟周期为10ns的时钟波形begin #5 clk=1'b1; #5 clk=1'b0; end initial //初始化输入数据信号、置数端、复位信号begin data=4'b0000; load=0; rst=0; #20 rst=1; //激励波形设定 #30 data=4'b0111; load=1; #10 load=0; #400 $finish; //400ns后结束仿真end endmodule 3.运行仿真。对建立的工程进行功能仿真,仿真结果如下:

带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计实验

带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计实验 一、实验题目:带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计。 二、实验目的:讨论学习经典数字计数器的Verilog描述方法和相关语法。 三、实验程序:module CNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA); input CLK,RST,EN,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) begin if(!RST) Q1<=0; else if(EN) begin if(!LOAD) Q1<=DATA; else if(Q1<9) Q1<=Q1+1; else Q1<=4'b0000; end end always @(Q1) if(Q1==4'h9) COUT=1'b1; else COUT=1'b0; endmodule 四、实验仿真结果:

五、仿真结果分析: (1)RST在任意时刻有效时,如CLK非上升沿时,计数也能清0。 (2)当EN=1,且在时钟CLK的上升沿时间范围LOAD=0时,4位输入数据DATA=0100被加载,在LOAD=1后作为计数器的计数初值,如图所示计数从0000加载到0100的时序。计数到9时,COUT输出进位1。 (3)当EN=,LOAD=1,RST=1时,计数正常进行,在计数数据等于9时进位输出高电平。另外,凡当计数从7计到8时有一毛刺信号,这是因为7到8的逻辑变化最大,每一位都发生了改变,导致各位信号传输路径不一致性增大。 六、硬件下载设置及测试过程:根据板子给定的引脚锁定图,选定相应的硬件把程序中的输入输出端和板子的相应引脚给锁定,编译并下载程序,定好DATA,选择合适的CLK,手动改变EN和LOAD的值,观察实验现象看是否符合程序的结果。 七、总结:通过对带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计,我对verilog描述方法和相关语法有了一个比较深入的认识。这将让我对之后课程的学习和深入探讨提供一个基础,让我不断去专研FPGA的学习。

VerilogHDL十进制计数器实验Quartus90非常详细的步骤(精)

实验二十进制计数器实验该实验将使用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 工具有综合工具、仿真工具以及时序

verilog 前导零计数器 函数

verilog 前导零计数器函数 摘要: 1.Verilog实现前导零计数器原理 2.具体实现方法 3.代码示例 正文: Verilog是一种硬件描述语言,广泛应用于数字电路设计和FPGA开发。在Verilog中,实现前导零计数器的方法有很多,本文将介绍一种基于查找高位的1的位置来实现前导零计数器的Verilog代码。 1.Verilog实现前导零计数器原理 前导零计数器主要用于统计32位数中前导零的个数。实现原理是找到高位的1的位置,position输出的就是从高位到低位第一个1的位置。算个数的话用32减一下就行。 2.具体实现方法 以下是一种基于查找高位的1的位置来实现前导零计数器的Verilog代码方法: ```verilog reg [31:0] data; reg [ 4:0] position; reg [15:0] sel1; reg [ 7:0] sel2;

reg [ 3:0] sel3; reg [ 2:0] sel4; // 输入数据 initial begin data = 32"h12345678; // 示例输入数据end // 查找高位1的位置 always @(*) begin sel1 = 15"h0; sel2 = 15"h0; sel3 = 15"h0; sel4 = 15"h0; position = 0; // 从高位到低位查找第一个1的位置 integer i; for (i = 31; i >= 0; i--) begin if (data[i] == 1) begin position = i; break; end end // 更新选择器值

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

同步可逆十进制计数器verilog代码以下是一个同步可逆十进制计数器的Verilog代码: ``` module sync_reversible_counter( input clk, // 输入时钟信号 input reset, // 输入复位信号 output reg [3:0] count // 输出计数器值 ); // 定义状态变量 reg [2:0] state; // 初始化状态变量和计数器值 initial begin state = 3'b000; count = 4'b0000; end // 状态转移逻辑 always @(posedge clk) begin

if (reset) begin // 复位信号为高电平时,将状态变量和计数器值重置为初始值 state <= 3'b000; count <= 4'b0000; end else begin // 否则进行状态转移操作 case (state) 3'b000: begin // 当前状态为000时,下一状态为001,计数器加1 state <= 3'b001; count <= count + 1; end 3'b001: begin // 当前状态为001时,下一状态为010,计数器加1 state <= 3'b010; count <= count + 1; end 3'b010: begin // 当前状态为010时,下一状态为011,计数器加1 state <= 3'b011; count <= count + 1; end

3'b011: begin // 当前状态为011时,下一状态为100,计数器加1 state <= 3'b100; count <= count + 1; end 3'b100: begin // 当前状态为100时,下一状态为101,计数器加1 state <= 3'b101; count <= count + 1; end 3'b101: begin // 当前状态为101时,下一状态为110,计数器加1 state <= 3'b110; count <= count + 1; end 3'b110: begin // 当前状态为110时,下一状态为111,计数器加1 state <= 3'b111; count <= count + 1;

模计数器verilog报告

实验名称 模8计数器 姓名:xxx 班级:xxx 学号:xxxxx 报告日期:xxxxxx 1.实验目的 练习在modelsim下编写verilog程序,熟悉modelsim运行过程,并学会用verilog 编写一个模八计数器。 2.实验任务 编写一个模值为八的计数器的功能模块实现模为八带清零端的(异步清零);并且编写一激励模块来测试该模块。 3.实验内容及步骤 3.1 实验内容 编写模8计数器模块及激励模块 3.2 本次所实现的功能描述 模8计数器有两个输入端,分别为 clock (时钟控制输入端),和clear(异步清零端),一个输出端Q用来周期性的显示。

Clock:时钟信号,当上升沿到来时,计数器自动加一。 Clear:异步清零端,低电平到来时计数器自动清零。 Q:输出端,从000-111共八个状态。 3.3 本次实验的设计方案 带有异步清零端的模8计数器共有8个状态,所以输出端Q只需要三位(从000----111)共八个状态。还需要一个输入端(clock)来输入时钟信号,另一个输入端(clear)来输入清零信号。 模8计数器的状态转移图如下: clock Clear

1.进入modelsim后点击file ----> new ---->project.之后出现一个建立工程的对话框,键入counter_8工程名后,再在下面路径添加一个自己的文件夹。确认后会弹出一个对话框,点击creat New File,在工程conuter_8下建立两个文件分别叫做counter_8的功能模块文件和test_counter_8的测试激励模块文件。 2.双击进入文件后编写程序 3.编译,如果程序出错对程序进行修改。之后再编译,编译成功后点击simulate进行仿真。. 4.观察仿真结果是否符合事先的设计。不符合继续修改程序。 模8计数器的功能模块如下: module counter_8(clock,clear,q); input clock,clear; output[2:0] q; reg[2:0] q; always @(posedge clock or negedge clear) begin if(!clear) q<=0; else

基于verilog的循环计数器

实验五循环计数器 一、实验目的 1、熟悉Quartus和Modelsim 软件 2、学习分配管脚和下载测试 3、乘法运算显示电路设计验证 二、循环计数器的源代码 module xunhuan(clk,hex0,hex1); input clk; output [7:0]hex0,hex1; reg[7:0]hex0,hex1; reg[4:0]count; reg[25:0]fenpin; reg clk_fp; always@(posedge clk) begin if(fenpin<26'd5*******) fenpin<=fenpin+1'b1; else fenpin<=26'd0; end always@(posedge clk) begin if(fenpin<=26'd2*******) clk_fp<=1'b1; else clk_fp<=1'b0; end always@(posedge clk_fp) begin if(count>5'd0) count<=count-1'd1; else count<=5'd29; case(count)

5'd29: begin hex0=8'h90; hex1=8'ha4;end 5'd28: begin hex0=8'h80; hex1=8'ha4;end 5'd27: begin hex0=8'hf8; hex1=8'ha4;end 5'd26: begin hex0=8'h82; hex1=8'ha4;end 5'd25: begin hex0=8'h92; hex1=8'ha4;end 5'd24: begin hex0=8'h99; hex1=8'ha4;end 5'd23: begin hex0=8'hb0; hex1=8'ha4;end 5'd22: begin hex0=8'ha4; hex1=8'ha4;end 5'd21: begin hex0=8'hf9; hex1=8'ha4;end 5'd20: begin hex0=8'hc0; hex1=8'ha4;end 5'd19: begin hex0=8'h90; hex1=8'hf9;end 5'd18: begin hex0=8'h80; hex1=8'hf9;end 5'd17: begin hex0=8'hf8; hex1=8'hf9;end 5'd16: begin hex0=8'h82; hex1=8'hf9;end 5'd15: begin hex0=8'h92; hex1=8'hf9;end 5'd14: begin hex0=8'h99; hex1=8'hf9;end 5'd13: begin hex0=8'hb0; hex1=8'hf9;end 5'd12: begin hex0=8'ha4; hex1=8'hf9;end 5'd11: begin hex0=8'hf9; hex1=8'hf9;end 5'd10: begin hex0=8'hc0; hex1=8'hf9;end 5'd9: begin hex0=8'h90; hex1=8'hc0;end 5'd8: begin hex0=8'h80; hex1=8'hc0;end 5'd7: begin hex0=8'hf8; hex1=8'hc0;end 5'd6: begin hex0=8'h82; hex1=8'hc0;end 5'd5: begin hex0=8'h92; hex1=8'hc0;end 5'd4: begin hex0=8'h99; hex1=8'hc0;end 5'd3: begin hex0=8'hb0; hex1=8'hc0;end 5'd2: begin hex0=8'ha4; hex1=8'hc0;end 5'd1: begin hex0=8'hf9; hex1=8'hc0;end 5'd0: begin hex0=8'hc0; hex1=8'hc0;end endcase end Endmodule

verilog 三进制计数器设计与JK触发器

verilog 三进制计数器设计 每输入三个时钟信号,输出一个进位信号(JK触发器主要用来保持,翻转等作用) 利用上边沿JK触发器和门电路组成三进制计数器(Q1,Q0),进位信号为CO JK触发器:具有置0、置1、保持和翻转功能,通过控制输入信号J,K的不同来实现不同的功能 首先设计JK触发器,描述其功能 module jkcfq(Q,J,CLK,RD); iuput J,K,CLK,RD;//输入信号J,K,时钟信号CLK,复位信号RD(低电平有效) output Q;//输出为Q reg Q;//把输出定义为寄存器变量 always @(posedge CLK or negedge RD)//只要时钟上升沿来了或者复位信号来了,执行下面语句 begin if (!RD)//判断是否为复位信号 Q <= 1'b0; else case({J,K})//J,K触发器的功能选择,通过JK的值来选择 2'b00:Q <= Q;//保持 2'b00:Q <= 1'b0; //置0 2'b00:Q <= 1'b1; //置1 2'b00:Q <= ~Q; //翻转 default : Q <=1'bx;//高阻态 endcase end endmodule 设计顶层的计数模块 module count3(Q1,Q0,CO,CLK,CR) ouput Q1,Q0,CO;//输出信号Q1,Q0,进位输出信号CO input CLK,CR;//输入时钟信号CLK,输入复位信号CR wire CR,Q1F,Q0F,CLKF;定义四根线,其中复位信号为wire类型 wire VCC,GND;//定义电源线和接地线 assign VCC = 1;//给电源线和接地线赋值 assign GND = 0; //调用JK触发器 jkcfq u1(.Q(Q0),.J(Q1F),.K(VCC),.CLK(CLK),.RD(CR)); /*第一个JK触发器,输出Q端和顶层输出Q0端相连,j端和线Q1F相连,K端和VCC相连,即接高电平,CLK和系统时钟相连,复位端和复位端连*/ jkcfq u2(.Q(Q1),.J(Q0),.K(VCC),.CLK(CLK),.RD(CR)); /*第二个JK触发器,输出Q端和顶层输出Q1端相连,j端和顶层输出Q0相连,K端和VCC 相连,即接高电平,CLK和系统时钟相连,复位端和复位端连*/ not u4(Q1F,Q1);//将输入的Q1取反赋给线Q1F not u5(Q0F,Q0);//将输入的Q0取反赋给线Q0F

实验六Verilog设计分频器计数器电路答案

实验六Verilog设计分频器/计数器电路 一、实验目的 1、进一步掌握最根本时序电路的实现方法; 2、学习分频器/计数器时序电路程序的编写方法; 3、进一步学习同步和异步时序电路程序的编写方法。 二、实验容 1、用Verilog设计一个10分频的分频器,要求输入为clock〔上升沿有效〕,reset〔低电平复位〕,输出clockout为4个clock周期的低电平,4个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、建立工程 2、创立Verilog HDL文件 3、输入10分频器程序代码并保存 4、进展综合编译 5、新建波形文件 6、导入引脚 7、设置信号源并保存 8、生成网表 9、功能仿真 10、仿真结果分析 由仿真结果可以看出clockout输出5个clock周期的低电平和5个clock的高电平到达10分频的效果,设计正确。 实验二:十进制加法计数器〔异步清零〕

基于Verilog的任意模长可加减计数器设计

基于Verilog 的任意模长可加减计数器设计 一、设计要求 计数器是一种在时钟的触发下,完成计数功能的时序逻辑电路,输出结果由输入时钟和计数器上一状态的计数共同决定。本设计要求实现的计数器,具有以下功能: (1)要求实现计数器工作状态的控制; (2)要求实现计数器的异步清零功能; (3)要求实现计数器递增和递减的功能; (4)要求实现计数器的计数范围(模长)任意改变; 二、设计思路 计数器工作状态的控制,可以设计一个使能端,在外部时钟的触发下,只有当使能端信号有效(高电平),才启动计数器的计数功能(递增或递减),否则计数器输出结果不变。 计数器的异步清零功能,可以设计一个外部输入的清零端,在外部输入信号有效(低电平)的情况下,直接清零计数器,不用等待下一个外部时钟的触发,即计数器的清零是异步的。 计数器计数方向的控制,设计一个加减可控的信号端口,在时钟的触发、异步清零无效以及计数器使能端有效的情况下,该输入端为高电平则计数器完成递增功能,低电平则完成递减功能。 实现计数器的任意模长,即进入下一个计数周期,其计数的最大值可以发生变化。设计一个4位(最大模长为16)的输入端口,可以在当前计数周期结束,即计数器产生一个溢出信号的同时,判断该端口输入的信号是否发生变化,通过相邻两个计数周期的端口数据作异或运算,结果为高电平则代表模长发生变化,即进入的下一个计数周期,其计数最大值要发生变化。 三、程序设计 本次设计使用的是Quartus 11.0开发环境,该软件没有自带仿真功能(9.0版本以后都没自带),需要使用第三方的Modelsim软件,故本设计的程序包括计数器的Verilog设计以及仿真测试需要的testbench激励文件两部分。 计数器的Verilog设计:

Verilog代码(计数器、交通灯、串并转换)

1、通用二进制计数器 设计一个二进制计数器(默认为8位计数器),具有加/减计数功能、异步复位、预制数功能。 代码如下: `define WIDTH 8 module BinaryCounter(counter,clk,up_down,load,reset,din); output reg [`WIDTH-1:0] counter; input clk; input up_down; //1为加计数,0为减计数 input reset; input load; //预置数,1有效,din输出到counter input [`WIDTH-1:0] din; always@(posedge clk or posedge reset) begin if(reset) counter<=0; else if(load) counter<=din; else if(up_down==1) counter<=counter+1; else if(up_down==0) begin counter<=counter-1; if(counter<1) counter<=0; end end endmodule 测试程序如下: `define WIDTH 8 module BinaryCounter_tb; reg clk,up_down,reset,load; reg [`WIDTH-1:0] din; wire [`WIDTH-1:0] counter; integer i; initial begin clk=0; reset=1; #5 reset=0; #3000 $stop; end

verilog八位十进制计数器实验报告(附源代码)

verilog八位十进制计数器实验报告(附源代码)

8位10进制计数器实验报告 一、实验目的 ●学习时序逻辑电路 ●学会用verilog语言设计时序逻辑电路 ●掌握计数器的电路结构 ●掌握数码管动态扫描显示原理 二、实验内容 实现一个8bit十进制(BCD码)计数器 端口设置: 用拨动开关实现复位和使能 LED灯来表示8位数据 用数码管显示16进制的八位数据 1.复位时计数值为8‘h0 2.复位后,计数器实现累加操作,步长为1,逢 9进1,,计数值达到8‘h99后,从0开始继 续计数 3.使能信号为1时正常计数,为0时暂停计数, 为1时可继续计数。 4.每0.5s计数值加1

当达到一个扫描信号的周期时的波形如下 当达到一个以上计数信号的周期时的波形

实验分析: 实验总体结构和模块间关系如图所示:(其中还需要补上使能信号) 实验原理: 由于要求实现数码管和LED灯的显示,先考虑LED灯,可以直接由8位输出信号控制,而数码管需要同时显示两个不同的数字,需要时分复用,即快速的交替显示十位和个位,利用人眼的视觉暂留来达到同时显示。这样就需要两种不同的频率信号。一种是每0.5s一次,作为计数信号,用脉冲生成器生成,另一种是1ms一次的扫描信号,用降频器生成,将计数信号输入计数器来计数,并将计数的值和扫描信号同时输入扫描显示模块。在扫描显示模块里用一个变量值在0和1间交替来指导选择信号选择数码管的不位数。交替的条件是收到扫

描信号。7段数码管和LED灯都与计数值的变量相连即可实现。 实现细节 1.首先写一个脉冲生成器(div.v),每0.5s输出 一次计数脉冲cnt 2.写一个计数器(cnt.v)设置一个8位计数变 量,分成两个4位变量dnum(十位)和num (个位)。如果接受到rst信号,则将计数变量置成x90.否则每次接受到计数信号,将计数变量的值增1,(同时考虑进位和回到x00 的情况) 3.写一个扫描信号生成器(scan.v),每1ms生 成一次扫描信号 4.写一个显示器(display.v),设置对数码管位 数的4位选择信号sel和led灯的控制变量 dnum(高4位)和num(低四位)。设置 seg作为7段数码管的控制变量。设置一个 中间变量a(初值0),如果接受到scan信 号,将a 0变1或1变0.如果a为0,sel 为x1101,显示数码管十位,如果a为1, sel为x1110,显示数码管个位。

相关文档