目录
一、实验目的:
二、实验内容:
三、实验要求:
四、实验步骤:
一、实验目的:
- 进一步熟悉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;