EDA:quartus II 13. 1
平台:CycloneV:5CSEMA5F31C6
阅读“《自己设计制作CPU与单片机》 ---- 姜咏江”
个人笔记中的文字表达极差。读书后为此次笔记对应的quartus II 13.1工程register的保存地址:to_registers。
2015.06.05 – 06.08
ey_register版本寄存器来自笔记者手笔。dffe版本寄存器来自书本。还不能根据需求从0笔记到寄存器。
1 暂存寄存器
1.1 ey_register版
(1) ey_register的由来
【1】逻辑函数
1位暂存寄存器的功能大概是这样:
Figure 1. 1位暂存寄存器真值表
将具有这样功能的暂存寄存器别名为ey_register。根据真值表得到对应的逻辑表达式:qn+1= !e·qn + e·d。
【2】原理图
在quartusII工程中新建ey_register.bdf文件,用quartus II的库(~\altera\13.1\quartus\libraries\primitives\logic)中的逻辑门符号描述ey_register的逻辑表达式(已经是最简)。得ey_register的电路描述图:
Figure 2. ey_register寄存器门级描述图
在quartus II 中,导线若拥有相同的名字则表示它们是连接关系。保存ey_register.bdf文件,将其设置为顶层文件。在quartusII中编译ey_register.bdf(Processing>> Start Compile)直至通过。
【3】功能仿真
在quartus II工程中新建ey_register.vwf文件,作为ey_register原理图的功能仿真文件(认识FPGA Verilog HDL笔记中含有为原理图建立功能仿真的过程)。设置: e引脚的信号的周期为诸如120ns的值,d引脚的信号的周期为诸如60ns的值,在Edit >> Set end time中将仿真结束时间设置为诸如600ns的值。点击Simulation >> Run Functional Simulation对ey_register进行功能仿真,得到下图(前2个周期):quartus II功能仿真模块证明了ey_register在理想情况下(不考虑器件延时等因素)的正确性。
(2) easy_register版n位寄存器
在quartusII工程中封装ey_register.bdf中的逻辑设计图:Project Navigator >> Files,选中ey_register.bdf文件。File>> Create/Update >> Create Symbol Files for current Files生成ey_register.bsf:
Figure 4. ey_register封装
ey_register.bsf为ey_register版本的1位寄存器的封装图(在工程根目录下保存有.bsf文件时quartus II才能发现工程其它目录下的.bsf文件)。
将ey_register8.bdf设置为新的顶层文件,对其进行编译、功能仿真。
在quartusII中对ey_register版的8位寄存器进行封装,利用这个封装可以得到位数更多诸如32位的寄存器。
由ey_register得来的n位寄存器可用于简单的场景中。可将根据ey_register.bdf或ey_register8.bdf编译得到的二进制文件下载到FPGA(CycloneV:5CSEMA5F31C6)平台中进行验证(开关作为输入,LED灯作为输出,my_first_fpga和 DE1-SOC中FPGA的流水灯笔记中含有针对FPGA平台的引脚分配的过程)。
1.2 dffe版
ey_register版的寄存器不具有“时钟控制”、“边沿触发”、“预置”等特色。用ey_register设计的寄存器不能被用到复杂的环境中(如CPU中)。若有一些简单的应用环境,被设计的寄存器也可能像ey_register一样简单。待环境逐渐变得复杂后,寄存器的结构由运行环境的需求而变得复杂。
dffe是quartusII库中(~\altera\13.1\quartus\libraries\primitives\storage)被设计好的一个基本的存储元件的封装。由dffe可以设计出常被念叨的16或32位寄存器。
(1) dffe版的n位寄存器
quartus II库中的dffe封装如下(原谅忽然冒出一个dffe):
Figure6. dffe 封装
dffe功能(简述):ENA= 1且CLK上升沿时,Q= D,否则Q保持不变。PRN和CLRN作预置(设定Q最开始的状态)Q状态之用,PRN为0时,Q输出1;CLRN为0时,Q输出为0。dffe具有1位暂存寄存器的功能。
根据dffe功能的简述,在quartusII工程中新建dffe_register8.bdf文件,在其中设计8位寄存器(每位独立,共用CLK,ENA,PRN,CLRN):