【原创】基于Altera DE2的数字实验 您所在的位置:网站首页 able和talented的区别 【原创】基于Altera DE2的数字实验

【原创】基于Altera DE2的数字实验

2023-03-16 07:04| 来源: 网络整理| 查看: 265

Project 3

    本实验实现一个定时器。KEY3可以启动和停止计时。KEY0复位(计数停止)。基本思路就是利用​​Project 2的分频时钟100Hz​​驱动十进制的计数器,将4个十进制的计数器串联,那么在HEX3-2上显示的数字就以S递增。

本实验包含以下内容:

1. 顶层模块的设计。

2. 单稳态脉冲的生成。

3. 编译报告。

设计

1. 顶层模块

(1)设置状态变量和计数器

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_git

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_ide_02

(2)设计一个4个数字的行波进位十进制计数器

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_git_03

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_sed_04

(3)将计数结果显示在7-segment上

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_sed_05

(4)使用选通时钟控制计数器

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_ide_06

(5)使用单稳触发复位信号。

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_ide_07

(6)用KEY3和KEY0控制状态

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_sed_08

(7)把state和reset信号显示在绿色led上

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_ide_09

2. 单稳脉冲生成模块

    当触发信号为高电平时,输出一个周期为1个时钟的脉冲。

【原创】基于Altera DE2的数字实验—001_3 (DE2)(Digital Logical)(Verilog)_git_10

3. 分析

    本实验要完成一个定时器并不难,因为驱动时钟在Project 2已经做好了。剩下就是调用计数器。但是,要能够在计数的过程中停止,仅仅靠复位就不够了,我们这里配合复位KEY0还用了KEY3,KEY3同样是按键,想要达到的效果是,KEY3按一次,计数停止,再按一次重新开始计数。这样,KEY3就和计数器的复位有关系了(重新开始计数),也和计数器的时钟有关系(计数停止不就是时钟不动了嘛)。所以就有了选通时钟和复位信号的控制。另外,KEY3作为按键,它的状态还是单独用state表示较好,这样不论按的快慢,state根据时钟翻转。再由state产生pulse,KEY3按一次,state翻转一次,而state翻转2次(KEY3按2次),才产生一个pulse,即复位一次。

完整代码:

1 /* File name: diglab3 2 * Function: This lab implements a timer. KEY3 start s and stops the timer. KEY0 resets 3 * the count (and stops the timer) 4 * Author: John S. Loomis 5 */ 6 7 module diglab3 ( 8 // clock input (50 MHz) 9 input CLOCK_50,10 // push buttons11 input [3:0] KEY,12 // dpdt switches13 input [17:0] SW,14 // 7-seg displays15 output [6:0] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7,16 // leds17 output [8:0] LEDG, // led green[8:0]18 output [17:0] LEDR, // led red[17:0]19 // gpio connections20 inout [35:0] GPIO_0, GPIO_121 );22 23 // all inout port turn to tri-state24 assign GPIO_0 = 36'hzzzzzzzzz;25 assign GPIO_1 = 36'hzzzzzzzzz;26 27 wire RST;28 assign RST = KEY[0];29 30 // setup clock divider31 wire [6:0] myclock;32 clock_divider cdiv (CLOCK_50, RST, myclock);33 34 // send switches to red leds35 assign LEDR = SW;36 37 // blank the unused HEX displays38 assign HEX7 = 7'h7f;39 assign HEX6 = 7'h7f;40 assign HEX5 = 7'h7f;41 assign HEX4 = 7'h7f;42 43 // state variable44 45 reg state;46 47 // setup counters48 wire [3:0] digit3, digit2, digit1, digit0;49 wire [3:0] ovr;50 51 wire clock, reset, pulse;52 assign clock = (state? myclock[2]: 1'b0);53 54 assign reset = (~pulse & RST);55 56 decimal_counter count0 (digit0, ovr[0], clock, reset);57 decimal_counter count1 (digit1, ovr[1], ovr[0], reset);58 decimal_counter count2 (digit2, ovr[2], ovr[1], reset);59 decimal_counter count3 (digit3, ovr[3], ovr[2], reset);60 61 // map to 7-segment displays62 63 hex_7seg dsp0 (digit0, HEX0);64 hex_7seg dsp1 (digit1, HEX1);65 hex_7seg dsp2 (digit2, HEX2);66 hex_7seg dsp3 (digit3, HEX3);67 68 // use one-pulse to trigger reset69 70 oneshot pulser (71 .pulse_out (pulse),72 .trigger_in (state),73 .clk (CLOCK_50)74 );75 76 always @(negedge KEY[3] or negedge RST)77 begin78 if (!RST)79 state


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有