远程FPGA虚拟实验平台用SystemVerilog HDL实现寄存器组和堆
原理
单端口寄存器组
单端口寄存器组在实验平台的图如下:
由图可知,单端口寄存器组的单端口指的是写入和读取的地址用的是来自一个端口的信号,在Load=1时,可以通过D,Index和时钟信号写入寄存器的值,同时,由于只有一个端口,四选一多路器读取的值是和写入的值同步的。
三端口寄存器堆
三端口寄存器堆的原理如下:
由图可知,三端口寄存器组较单端口寄存器堆多了一个多路选择器和输出。同时多了两个输入地址的端口RA1和RA2,用以控制两个多路选择器读哪个寄存器的值,这使得它可以在写入1个寄存器的同时读出2个不同寄存器的值。
源代码
单端口寄存器组
VirtalBoard模块
实验面板:
`default_nettype none
module VirtualBoard (
input logic CLOCK, // 10 MHz Input Clock
input logic [19:0] PB, // 20 Push Buttons, logical 1 when pressed
input logic [35:0] S, // 36 Switches
output logic [35:0] L, // 36 LEDs, drive logical 1 to light up
output logic [7:0] SD7, // 8 common anode Seven-segment Display
output logic [7:0] SD6,
output logic [7:0] SD5,
output logic [7:0] SD4,
output logic [7:0] SD3,
output logic [7:0] SD2,
output logic [7:0] SD1,
output logic [7:0] SD0
);
一堆七段译码器的实例化:
logic [3:0] HD[7:0]; // 8 hexadecimal display
SevenSegDecode ssdecode_inst7(.iData(HD[7]), .oSeg(SD7));
SevenSegDecode ssdecode_inst6(.iData(HD[6]), .oSeg(SD6));
SevenSegDecode ssdecode_inst5(.iData(HD[5]), .oSeg(SD5));
SevenSegDecode ssdecode_inst4(.iData(HD[4]), .oSeg(SD4));
SevenSegDecode ssdecode_inst3(.iData(HD[3]), .oSeg(SD3));
SevenSegDecode ssdecode_inst2(.iData(HD[2]), .oSeg</