在远程FPGA虚拟实验平台用SystemVerilog HDL实现七段译码器
源代码
在远程FPGA虚拟实验平台用SystemVerilog HDL实现五位二进制数用七段译码器显示为十六进制数需要将代码分为两个模块。
VirtualBoard模块
在已有的VirtualBoard.sv中,需要在模块内加入七段译码器模块实例化的语句。所以VirtualBoard.sv中的所有代码如下:
`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
);
//七段译码器模块实例化,此处的S[12:8]是五位二进制数,用SD1显示是虚拟实验要求。
SevenSegDecode ssd_inst(.iData(S[12:8]), .oSeg(SD1));
//用LED显示8个段的电平值
assign L[7:0] = SD1;
endmodule
在七段译码器模块实例化的语句中,若将S[12:8]换成S[11:8],即可实现四位二进制数的显示。
SevenSegDecode模块
根据实验要求,七段译码器模块应新建一SystemVerilog HDL文件,如图所示:
而后在文件中输入代码如下:(五位二进制的字母部分仅供参考)
module SevenSegDecode(
input logic [4:0]iData,//此处是五位二进制码,若改成[3:0]即可实现四位二进制码
output logic [7:0]oSeg
);
always_comb
/*case(iData)//四位二进制
4'b0000: oSeg = 8'b11000000;
4'b0001: oSeg = 8'b11111001;
4'b0010: oSeg = 8'b10100100;
4'b0011: oSeg = 8'b10110000;
4'b0100: oSeg = 8'b10011001;
4'b0101: oSeg = 8'b10010010;
4'b0110: oSeg = 8'b10000010;
4'b0111: oSeg = 8'b11111000;
4'b1000: oSeg = 8'b10000000;
4'b1001: oSeg = 8'b10010000;
4'b1010: oSeg = 8'b10001000;
4'b1011: oSeg = 8'b10000011;
4'b1100: oSeg = 8'b11000110;
4'b1101: oSeg = 8'b10100001;
4'b1110: oSeg = 8'b10000110;
4'b1111: oSeg = 8'b10001110;
default: oSeg = 8'b11111111;
endcase*/
case(iData)//五位二进制
5'b00000: oSeg = 8'b11000000;
5'b00001: oSeg = 8'b11111001;
5'b00010: oSeg = 8'b10100100;
5'b00011: oSeg = 8'b10110000;
5'b00100: oSeg = 8'b10011001;
5'b00101: oSeg = 8'b10010010;
5'b00110: oSeg = 8'b10000010;
5'b00111: oSeg = 8'b11111000;
5'b01000: oSeg = 8'b10000000;
5'b01001: oSeg = 8'b10010000;
5'b01010: oSeg = 8'b10001000;
5'b01011: oSeg = 8'b10000011;
5'b01100: oSeg = 8'b11000110;
5'b01101: oSeg = 8'b10100001;
5'b01110: oSeg = 8'b10000110;
5'b01111: oSeg = 8'b10001110;//F
5'b10000: oSeg = 8'b11000010;//G
5'b10001: oSeg = 8'b10001001;//H
5'b10010: oSeg = 8'b11111010;//I
5'b10011: oSeg = 8'b11110001;//J
5'b10100: oSeg = 8'b10001010;//K
5'b10101: oSeg = 8'b11000111;//L
5'b10110: oSeg = 8'b11001000;//M
5'b10111: oSeg = 8'b10101011;//N
5'b11000: oSeg = 8'b10100011;//O
5'b11001: oSeg = 8'b10001100;//P
5'b11010: oSeg = 8'b10011000;//Q
5'b11011: oSeg = 8'b10101111;//R
5'b11100: oSeg = 8'b10110110;//S
5'b11101: oSeg = 8'b10000111;//T
5'b11110: oSeg = 8'b11000001;//U
5'b11111: oSeg = 8'b11100011;//V
default: oSeg = 8'b11111111;
endcase
endmodule
五位二进制码的字母对照来源这里(字母i稍做更改因为我觉得我的i更可爱)
需要注意的是,在慕课作业中用这样的L是错的,我也暂时还没找到对的。
测试/保存/提交
保存新建的SystemVerilog HDL文件时建议保存在工程文件夹内的resource文件夹中,和VirtualBoard.sv放在一起方便找。
交作业的时候记得要把七段译码器的模块也交上去。
如果要交选做版本的作业,需要注意在虚拟实验平台测试的时候自己建一个版,加一个开关就好。