文档详情

quarterii4位数码管显示实验

今***
实名认证
店铺
DOCX
641.37KB
约10页
文档ID:105697928
quarterii4位数码管显示实验_第1页
1/10

贵州大学实验报告学院:电气工程学院 专业:测控技术与仪器 班级:测仪131姓名学号实验组实验时间2016.12.2指导教师成绩实验项目名称4位数码管显示实验实验目的通过利用硬件设计语言veriloag设计4位数码管显示电路、理解 Quartus II平台进行硬件开发的方法、深入理解verilog语言及其设计方法实验要求集中授课实验原理原理框图如下图4-1所示 FPGA控制数码管的动态扫描,采集数据和地址总线的数据,使能不同位的数码管,并将采集到的数据依次传送给段选译码模块,最后输出对应数字的段码,控制数码管显示对应总线的数据图4-1 原理框图实验仪器PC机、Quartus II软件、Keil μVision2软件实验步骤1、 首先,制作1位数码管显示电路,用verilong语言写module seg7(clk,rst_n,data,seg,sel);input clk;input rst_n;input [3:0]data;output reg[7:0] seg;output reg[2:0] sel;always @ (posedge clk or negedge rst_n)begin if(!rst_n) begin sel<= 0; end else begin sel<= 0; end end always @(*) begin if(!rst_n) begin seg=8'b1111_1111; end else begin case(data) 0: seg=8'b1100_0000; 1: seg=8'b1111_1001; 2: seg=8'b1010_0100; 3: seg=8'b1011_0000; 4: seg=8'b1001_1001; 5: seg=8'b1001_0010; 6:seg=8'b1000_0010; 7:seg=8'b1111_1000; 8:seg=8'b1000_0000; 9:seg=8'b1001_0000; 10:seg=8'b1000_1000; 11:seg=8'b1000_0011; 12:seg=8'b1100_0110; 13:seg=8'b1010_0001; 14:seg=8'b1000_0110; 15:seg=8'b1000_1110; default:seg=8'b1111_1111; endcase end end endmodule测试模块`timescale 1 ns/ 1 psmodule seg7_tb;reg clk;reg [3:0] data;reg rst_n; wire [7:0] seg;wire [2:0] sel;initial beginclk=1;rst_n=0;data=10;# 200.1rst_n=1;endalways # 10 clk = ~clk; seg7 seg7( .clk(clk), .rst_n(rst_n), .data(data), .seg(seg), .sel(sel)); Endmodule2、例化元件3、4位数码管的设计Frep模块module freq( clk, rst_n, clk_1k ); input clk; input rst_n; output reg clk_1k; reg[19:0] count; always @ (posedge clk or negedge rst_n) begin if (!rst_n) begin clk_1k <=1; count <=0; end else begin if (count<24999) count <=count+1; else begin count<=0; clk_1k<=~clk_1k; end end end endmoduleSeg7模块module SEG7( clk, rst_n, data, seg, sel ); input clk; input rst_n; input [15:0] data; output reg [7:0] seg; output reg[2:0] sel; reg [3:0] data_temp; reg [2:0] state; always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin sel<=0; data_temp<=0; state<=0; end else begin case(state) 0 : begin sel<=0; data_temp<=data[15:12]; state<=1; end 1: begin sel<=1; data_temp<=data[11:8]; state<=2; end 2:begin sel<=2; data_temp<=data[7:4]; state<=3; end 3:begin sel<=4; data_temp<=data[3:0]; state<=4; end default : state<=0; endcase end end always @(*) begin if(!rst_n) begin seg = 8'b1111_1111; end else begin case(data_temp) 0: seg=8'b1100_0000; 1: seg=8'b1111_1001; 2: seg=8'b1010_0100; 3: seg=8'b1011_0000; 4: seg=8'b1001_1001; 5: seg=8'b1001_0010; 6:seg=8'b1000_0010; 7:seg=8'b1111_1000; 8:seg=8'b1000_0000; 9:seg=8'b1001_0000; 10:seg=8'b1000_1000; 11:seg=8'b1000_0011; 12:seg=8'b1100_0110; 13:seg=8'b1010_0001; 14:seg=8'b1000_0110; 15:seg=8'b1000_1110; default:seg = 8'b1111_1111; endcase end end endmoduleTop模块module top( clk, rst_n, data, seg, sel ); input clk; input rst_n; input [15:0] data; output [7:0] seg; output [2:0] sel; wire clk_1k; freq freq ( .clk(clk), .rst_n(rst_n), .clk_1k(clk_1k) ); SEG7 SEG7( .clk(clk_1k), .rst_n(rst_n), .data(data), .seg(seg), .sel(sel) ); endmodule测试模块`timescale 1 ns/ 1 psmodule top_vlg_tst();// constants // general purpose registersreg eachvec;// test vector input registersreg clk;reg [15:0] data;reg rst_n;// wires wire [7:0] seg;wire [2:0] sel;// assign statements (if any) top top (// port map - connection between master ports and signals/registers .clk(clk), .data(data), .rst_n(rst_n), .seg(seg), .sel(sel));initial 。

下载提示
相似文档
正为您匹配相似的精品文档