【Verilog】实验三 数码管实验
目录
一、实验目的:
二、实验内容:
三、实验要求:
四、实验步骤:
一、实验目的:
- 进一步熟悉Modelsim和VIVADO工具;
- 掌握7段数码管显示译码器;
- 掌握7段数码管数码管动态输出显示的方法。
二、实验内容:
- 实现按动开关键,在数码管上显示相应的十六进制数 0~F。(参考给定的已有工程文件Prep-IO)
- 实现开发板上的数码管动态显示0~F。
三、实验要求:
要求首先使用Modelsim软件进行功能仿真,然后使用VIVADO软件综合,并下载到开发板进行电路功能测试。
四、实验步骤:
1.采用VerilogHDL语言编程实现输入4位二进制,输出是8位数码管显示码。
2.用Modelsim进行功能仿真。
数码管译码模块
testbench
仿真
从仿真图上可以看出,对于相应的输入,输出结果是正确的
3.分别设计4位二进制数自动生成模块和数码管的译码模块。
4.在顶层文件将2个电路模块实例化,并进行相应的连线。
5.用VIVADO综合并将电路下载到开发板进行电路功能测试。
拨动SW0~7,显示对应的数字
拨动SW8~15,显示的结果
xc7k325tffg676-1
module TOP_new(input wire clk_200MHz_p,
input wire clk_200MHz_n,
input wire[15:0]SW,
output wire seg_clk,
output wire seg_clrn,
output wire seg_sout,
output wire SEG_PEN
);
clk_wiz_0 instance_name (
// Clock out ports
.clk_out1(clk_100mhz), // output clk_out1
// Status and control signals
.reset(1'b0), // input reset
.locked(), // output locked
// Clock in ports
.clk_in1_p(clk_200MHz_p), // input clk_in1_p
.clk_in1_n(clk_200MHz_n) // input clk_in1_n
);
wire[31:0]Div;
wire[7:0] out;
wire[3:0] BCDCode;
wire[7:0] Seg0 = (SW[0]) ? out : 8'hFF;
wire[7:0] Seg1 = (SW[1]) ? 8'b10011111 : 8'hFF;
wire[7:0] Seg2 = (SW[2]) ? 8'b00100101 : 8'hFF;
wire[7:0] Seg3 = (SW[3]) ? 8'b00001101 : 8'hFF;
wire[7:0] Seg4 = (SW[4]) ? 8'b10011001 : 8'hFF;
wire[7:0] Seg5 = (SW[5]) ? 8'b01001001 : 8'hFF;
wire[7:0] Seg6 = (SW[6]) ? 8'b01000001 : 8'hFF;
wire[7:0] Seg7 = (SW[7]) ? 8'b00011111 : 8'hFF;
BCDCode U1(.clk(Div[25]),.rst(SW[15]),.BCDCode(BCDCode));
Seg7BCD U2(.out(out),.in(BCDCode));
wire[63:0] disp_data = {Seg0,Seg1,Seg2,Seg3,Seg4,Seg5,Seg6,Seg7};
clk_div U8(clk_100mhz,1'b0,SW[2],Div,CK);
P2S #(.DATA_BITS(64),.DATA_COUNT_BITS(6))
P7SEG (clk_100mhz,
1'b0,
Div[20],
disp_data,
seg_clk,
seg_clrn,
seg_sout,
SEG_PEN
);
endmodule
zidong.v
module zidong(input clk,
output reg[3:0] out);
always@(posedge clk)
out=out+1;
endmodule
top.v(修改)
wire[7:0] Seg0 = (SW[8]) ? 8'b00000001 : 8'hFF;
wire[7:0] Seg1 = (SW[9]) ? 8'b00001001 : 8'hFF;
wire[7:0] Seg2 = (SW[10]) ? 8'b00010001 : 8'hFF;
wire[7:0] Seg3 = (SW[11]) ? 8'b11000001 : 8'hFF;
wire[7:0] Seg4 = (SW[12]) ? 8'b01100011 : 8'hFF;
wire[7:0] Seg5 = (SW[13]) ? 8'b10000101 : 8'hFF;
wire[7:0] Seg6 = (SW[14]) ? 8'b01100001 : 8'hFF;
wire[7:0] Seg7 = (SW[15]) ? 8'b01110001 : 8'hFF;
wire[7:0] out;
wire[3:0] out1;
zidong U1(.clk(DIv[25]),.out(out1));
shumaguan U2(.out(out),.in(out1));
wire[7:0] Seg[0]=(SW[14]&SW[15])?out:8'hFF;
wire[7:0] Seg0 = (SW[0]) ? 8'b00000011 :
(SW[8]) ? 8'b00000001 :
(SW[14]&SW[15])?out:8'hFF;
wire[7:0] Seg1 = (SW[1]) ? 8'b10011111 :
(SW[9]) ? 8'b00001001 : 8'hFF;
wire[7:0] Seg2 = (SW[2]) ? 8'b00100101 :
(SW[10]) ? 8'b00010001 : 8'hFF;
wire[7:0] Seg3 = (SW[3]) ? 8'b00001101 :
(SW[11]) ? 8'b11000001 : 8'hFF;
wire[7:0] Seg4 = (SW[4]) ? 8'b10011001 :
(SW[12]) ? 8'b01100011 : 8'hFF;
wire[7:0] Seg5 = (SW[5]) ? 8'b01001001 :
wire[7:0] Seg5 = (SW[13]) ? 8'b10000101 : 8'hFF;
wire[7:0] Seg6 = (SW[6]) ? 8'b01000001 :
(SW[14]) ? 8'b01100001 : 8'hFF;
wire[7:0] Seg7 = (SW[7]) ? 8'b00011111 :
(SW[15]) ? 8'b01110001 : 8'hFF;