Menu Close

Quartus 下利用ROM 实现7段译码显示

在上节内容中我们讲解了mif文件的格式以及使用方法,可以利用文本编辑器进行mif文件的编写。本节内容主要利用已经生成的ROM(8 X 256),利用mif文件将ROM的内容设置成7段数码管的译码内容,对比数码管case语句的译码,可以非常容易地转换成mif文件。

1.编写7段数码管译码mif文件

case语句译码复制如下:


 

按照case语句的内容翻译成mif文件的地址与数据的对应关系。

mif文件内容如下:


 

2.设计利用ROM进行译码的程序

  • 新建工程

工程名称–rom_7SEG,顶层实体的名称–rom_7SEG,顶层文件的名称–rom_7SEG,顶层文件的module name–rom_7SEG

  • 在新工程中利用向导生成单端口ROM,名称为p1_rom,并在工程中例化,例化名为p1_rom_inst,参照Quartus ROM 的生成与配置详解
  • 编写rom_7SEG.v文件,
    • 分频,将50Mhz的时钟分频成1HZ的单脉冲信号
    • 地址计数器

程序代码如下:

3. 设置ROM的mif文件

将上面的mif文件存储到工程目录中(p1_rom.mif),并选取ROM的mif并编译。

  • 管脚锁定

根据FII-PRA006的硬件使用手册,进行管脚锁定,如表1

表1

程序信号名 网络标号 FPGA管脚 端口说明
clk C10_50MCLK 91 输入时钟
rst KEY3 10 复位按键
SEAT[5] SEG_3V3_D5 124 位选信号第5位
SEAT[4] SEG_3V3_D4 127 位选信号第4位
SEAT[3] SEG_3V3_D3 129 位选信号第3位
SEAT[2] SEG_3V3_D2 141 位选信号第2位
SEAT[1] SEG_3V3_D1 142 位选信号第1位
SEAT[0] SEG_3V3_D0 136 位选信号第0位
SEVEN_SEG[6] SEG_PG 135 段选信号第7位
SEVEN_SEG[5] SEG_PF 138 段选信号第6位
SEVEN_SEG[4] SEG_PE 126 段选信号第5位
SEVEN_SEG[3] SEG_PD 125 段选信号第4位
SEVEN_SEG[2] SEG_PC 133 段选信号第3位
SEVEN_SEG[1] SEG_PB 137 段选信号第2位
SEVEN_SEG[0] SEG_PA 132 段选信号第1位
DP SEG_DP 128 段选信号第0位
  • 重新编译,在FII-PRA 006上下载测试。

测试结果应该是在FII-PRA 006开发板上最右边的数码管显示从 0 到 f  每秒的速度进行跳动。

4. Quartus mif文件编辑器的使用

除了使用通用的mif文件编辑器编辑mif文件外,Quartus 还提供了表格式mif文件编辑功能。

  • 在Quartus 工程中新建mif文件,菜单file–>New… –>,选取类型为Memory Initialization File , 如图1,

 

图1

点击OK,跳出的界面如图2,填写对应的ROM(RAM)的深度和输出宽度。

 

图2

点击OK,跳出图3界面,

 

 图3

在图3中,鼠标右键点击ASCII的位置,设置地址和数据的表示格式(如16进制,8进制,2进制等)

    • 根据需要编辑表中的内容,完成后存储,并于ROM的mif文件相关联就可以使用了。

练习题:

  1. 利用ROM和 mif文件编写应用程序,利用4位数码管实现数字中的分,秒显示。要求:
    •  利用1个深度256,位宽为8的ROM进行译码,将小数点显示在第3个数码管上,要求用两种方法实现:
      • DP直接译码(Verilog)
      • DP结合7段数码管的数字部分组成8段,在mif文件中设计成通用的译码电路,并用Verilog代码实现不同的数码管和小数点的调用。
  2. 编写4位2进制自然编码到4位格雷码的转换表,形成mif文件,使用4位开关作为输入,并用1位数码管译码显示。(硬件部分参照FII-PRA006/010原理图)

 

Posted in FPGA, FPGA 教材教案, FPGA硬件资源, Quartus II, Verilog, 开发工具, 教材与教案, 文章