Verilog数码管实验
实验1 多路选择器

激励代码解释: `timescale 10 ns/ 1 ps module mux21_vlg_tst();
reg a; reg b; reg s; wire y;
// 设置时间尺度和时间精度 // 测试代码的端口参数列表为空 // 输入变量声明为 reg 型变量
// 输出变量声明为 wire 型变量
always 语句块的使用
always 块的语句格式如下: always @(<敏感事件列表>)
各可执行的语句; …… 其中敏感事件列表中列出了所有影响 always 块中输出的信号清单,也就是 说,如果敏感事件列表中的任何一个变量发生了变化,都要执行 always 语句块 中的语句。如 always @ (a or b or s)表示:只要 a、b、s 中的任何一个变量发生了 变化,就立刻执行 always 语句块中的语句。 为了方便起见,敏感列表也可以用“*”代替,如 always @ (*), (*)号将 自动包含 always 语句块中右边的语句或条件表达式中的所有信号。如程序清单 2, 只要 always 语句块中表达式右边出现的变量 a 和 b,或者条件表达式中出现的变 量 s,这三个变量中的任何一个变量发生了变化,就立刻执行 always 语句块中的 语句。 always 语句还有另外一种形式,即:always 后面不带任何有关敏感事件列表
系统硬件综合设计实验报告

系统硬件综合设计实验报告# 系统硬件综合设计实验报告## 实验目的本实验的主要目的是综合运用课程中所学的硬件设计知识,设计一个具有一定功能的系统硬件。
通过实践,加深对硬件设计原理的理解,提高硬件设计能力。
## 实验原理在本实验中,我们将使用FPGA作为硬件平台,通过Verilog HDL语言进行设计。
FPGA可以灵活重构硬件电路,方便在实验过程中进行调试和修改。
在设计过程中,我们将使用数电模块以及FPGA内部资源实现所需的功能。
## 实验内容本次实验要求设计一个功能齐全的计算器。
计算器需要实现基本的加减乘除运算功能,并且能够显示运算结果。
具体功能要求如下:1. 输入:使用8位开关模拟输入两个8位二进制数。
2. 输出:输出两个输入数以及运算结果,并在数码管上显示。
3. 加法:实现两个八位二进制数的加法。
4. 减法:实现两个八位二进制数的减法。
5. 乘法:实现两个八位二进制数的乘法。
6. 除法:实现两个八位二进制数的除法。
## 实验过程与结果根据实验要求,我们首先设计了输入部分。
通过读取8个开关的状态,我们可以获得两个8位二进制数。
然后我们使用Verilog HDL语言编写了加法、减法、乘法和除法的模块。
这些模块使用了逻辑运算和算术运算来实现相应的功能。
最后,我们将输出结果显示在数码管上。
为了实现数码管的显示功能,我们使用了FPGA提供的数码管驱动模块。
在设计过程中,我们将运算结果转换成BCD 码,然后将BCD码输入到数码管驱动模块中进行显示。
经过调试和修改,我们成功实现了计算器的基本功能。
通过改变开关的状态,我们可以输入不同的二进制数,并获得正确的运算结果。
同时,结果也能够正确地显示在数码管上。
## 实验总结通过本次实验,我们深入学习了硬件设计的原理和方法,并且实践中提高了我们的设计能力。
本次实验的设计过程中,我们灵活运用了课程中所学的知识,并且通过调试和修改,解决了一些问题。
在实验中,我们也意识到硬件设计需要细致入微,每一个步骤都要认真对待。
(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)

(1)一位数码管显示0-9:
(2)八位数码管显示学号后八位: 七、心得体会
七段码管位选输入信号 七段码管位选输入信号 七段码管位选输入信号
五、 实验步骤
1、打开 QUARTUSII 软件,新建一个工程。 2、建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3、按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序。其 程序如下所示:
(1)一位数码管显示0-9:
电子科技大学成都学院学院
标准实验报告
(实验)课程名称 数字电路 EDA 设计与应用
姓名 乱弹的枇杷 学号 专业 指导教师
一、 实验名称 数码管显示(一位数码管显示 0-9,八位数码管显示学号
后八位)
二、 实验目的 1、了解数码管的工作原理。 2、学习七段数码管显示译码器的设计。 3、掌握 VHDL 的 CASE 语句及多层次设计方法。
信号名称对应fpga管脚名说明7segaf13七段码管段输入信号7segbf14七段码管段输入信号7segcf15七段码管段输入信号7segde15七段码管段输入信号7segef16七段码管段输入信号7segff17七段码管段输入信号7segge18七段码管段输入信号7segdpf18七段码管dp段输入信号7segsel0g18七段码管位选输入信号7segsel1g17七段码管位选输入信号7segsel2g16七段码管位选输入信号实验步骤1打开quartusii软件新建一个工程
信号名称 7SEG-A 7SEG-B 7SEG-C 7SEG-D 7SEG-E 7SEG-F 7SEG-G 7SEG-DP 7SEG-SEL0 7SEG-SEL1 7SEG-SEL2
十六进制7段数码显示译码器设计

哈尔滨理工大学软件学院实验报告课程 FPGA题目十六进制7段数码显示译码器设计班级集成12-2班专业集成电路设计与集成系统学生学号 12140202272014年10 月8日实验一十六进制7段数码显示译码器设计实验目的:1.熟悉硬件逻辑电路的一般设计和测试流程;2.嵌入式逻辑分析仪使用方法;实验内容及步骤:1.用Verilog HDL设计1位7段数码管的显示译码电路,能够显示0~f。
显示数字由SW3~SW0设定;2.使用嵌入式逻辑分析仪进行仿真;3.将实验程序下载到DE2运行。
实验程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_Arith.ALL;USE IEEE.STD_LOGIC_Unsigned.ALL;ENTITY FREQ ISPORT(clk_lk: IN STD_LOGIC;SW: IN STD_LOGIC_VECTOR(3 DOWNTO 0);seg: out STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY;ARCHITECTURE one OF FREQ ISSIGNAL seg_r: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINseg<=seg_r(6 DOWNTO 0);PROCESS(clk_lk)BEGINCASE SW ISWHEN X"0"=>seg_r<=X"c0";WHEN X"1"=>seg_r<=X"f9";WHEN X"2"=>seg_r<=X"a4";WHEN X"3"=>seg_r<=X"b0";WHEN X"4"=>seg_r<=X"99";WHEN X"5"=>seg_r<=X"92";WHEN X"6"=>seg_r<=X"82";WHEN X"7"=>seg_r<=X"f8";WHEN X"8"=>seg_r<=X"80";WHEN X"9"=>seg_r<=X"90";WHEN X"a"=>seg_r<=X"88";WHEN X"b"=>seg_r<=X"83";WHEN X"c"=>seg_r<=X"c6";WHEN X"d"=>seg_r<=X"a1";WHEN X"e"=>seg_r<=X"86";WHEN X"f"=>seg_r<=X"8e";END CASE;END PROCESS;END;实验结果:。
Verilog实验全加器与比较器的设计

实验报告课程名称:Verilog数字系统设计实验实验项目:全加器与比较器的设计姓名:专业:计算机科学与技术班级:学号:计算机科学与技术学院实验教学中心实验项目名称:全加器与比较器的设计一、实验目的1.学习用Verilog HDL语言描述组合逻辑电路。
2.学会Quartus II利用仿真与下载调试的程序方法。
二、实验内容利用Verilog HDL语言设计四位全加器和比较器。
三、实验用设备仪器及材料硬件:计算机软件:Quartus II软件四、实验原理及接线1. 数值比较器用途是比较两个二进制数的大小。
一位数值比较器:比较输入的两个1位二进制数A、B的大小。
多位数值比较器:比较输入的两个位二进制数A、B的大小,比较时需从高位到低位逐位比较。
比较器功能框图:GSEB1B0下表是一位数值比较器的真值表。
表1-1 比较器真值表2.全加器:全加器是实现两个一位二进制数及低位来的进位数相加(即将三个二进制数相加),求得和数及向高位进位的逻辑电路。
所以全加器有三个输入端(Ai,Bi,Ci-1)和两个输出端Si,Ci+1。
真值表如下:五、实验程序代码及仿真1、比较器代码module bijiaoqi(a,b,l,g,e,ledcom);input[3:0] a,b;output l,g,e;output ledcom;reg l,g,e;always@(a,b)beging = a>b ? 1:0;l = a<b ? 1:0;e = a==b ? 1:0;endendmodule比较器结果仿真结果2、全加器代码module add(a,b,cin,cout,sum); input a,b,cin;output cout,sum;wire a,b,cin,cout,sum;wire w1,w2,w3,w4;and u1(w1,a,b);and u2(w2,a,cin);and u3(w3,b,cin);or #2 u4(cout,w1,w2,w3);xor f1(w4,a,b);xor #1 f2(sum,w4,cin);endmodule全加器结果仿真结果六、心得与体会通过本次实验,使我掌握了Verilog编程方法以及熟悉了如何使用QuartusII 软件。
8位ALU(算术逻辑单元)verilog语言

大连理工大学城市学院FPGA实验报告实验内容:8位ALU系别班级:电子1004班学号:姓名:日期:2013.4.14一.设计概述:一种基于可编程逻辑器件FPGA和硬件描述语言的8位的ALU的设计方法。
该ALU采用层次设计方法,有寄存器模块、控制模块和显示模块组成,能实现8位无符号数的取值、加减和4种逻辑运算(与、或、异或、同或)。
该ALU在QuartusII软件环境下进行功能仿真,通过DE2验证。
二.设计功能:1、该处理器的数据宽度为8bit,可以实现算术加法、减法、逻辑与、逻辑或、逻辑非、逻辑与非、逻辑或非和逻辑异或等8种运算。
2、用选择端opcode [2:0] 选择8种运算,2个操作数分别是a_r [7:0]和b_r[7:0],运算结果是alu_out[7:0];并定义选择如下。
3、使用DE2板上的3个拨码开关设置当前ALU的运算功能,再由8个拨码开关给定数据A 和数据B,由一个按键key手动提供脉冲。
三.设计方案:本设计共有5个模块。
1)脉冲输出器(key手动脉冲),计数依次产生4个脉冲到各个部件,第一个脉冲启动信号。
2)寄存器A,第二个脉冲来时锁存数据A,并在数码管上显示。
3)寄存器B,第三个脉冲来时锁存数据B,并在数码管上显示。
4)8位ALU,第四个脉冲来时进行运算,并锁存结果alu_out。
5)结果显示器,将结果显示通过DE2上的数码管显示。
四.程序分析:主程序模块:module alu8(clk,clk_r,rst,a,b,alu_out,opcode,sw_ab,HEX1, HEX0, HEX7, HEX6, HEX5, HEX4);input clk,rst,clk_r;input [7:0] sw_ab;input [2:0] opcode;output [6:0] HEX1, HEX0, HEX7, HEX6, HEX5, HEX4;output [7:0] a;output [7:0] b;output [7:0] alu_out;rega U1(.clk(clk),.rst(rst),.sw_ab(sw_ab),.a_r(a),.clk_r(clk_r),.HEX7(HEX7),. HEX6(HEX6));regb U2(.clk(clk),.rst(rst),.sw_ab(sw_ab),.b_r(b),.clk_r(clk_r),.HEX5(HEX5),. HEX4(HEX4));alur U3(.clk(clk),.rst(rst),.a_r(a),.b_r(b),.alu_out(alu_out),.opcode(opcode)); digital U4(.clk_r(clk_r),.rst(rst),.alu_out(alu_out),.HEX1(HEX1),. HEX0(HEX0)); endmodule第一位数A模块:module rega (clk,clk_r,rst,sw_ab,a_r,HEX7,HEX6);input [7:0] sw_ab;input clk,clk_r,rst;output [7:0] a_r;reg [7:0] a_r;output reg[6:0] HEX7,HEX6;reg [3:0] cnt;always @(posedge clk or negedge rst)if(!rst) cnt<=1'd0;else if(cnt==5) cnt<=1'd0;else cnt<=cnt+1'd1;always @(posedge clk or negedge rst)if(!rst) a_r=0;else if(cnt==1) a_r=sw_ab;else a_r=a_r;parameter seg0=7'b1000000,seg1=7'b1111001,seg2=7'b0100100,seg3=7'b0110000,seg4=7'b0011001,seg5=7'b0010010 ,seg6=7'b0000010,seg7=7'b1111000,seg8=7'b0000000,seg9=7'b0010000,sega=7'b0001000,segb=7'b0000011 ,segc=7'b1000110,segd=7'b0100001,sege=7'b0000110,segf=7'b0001110;always @(posedge clk_r)case(a_r[3:0])4'h0: HEX6[6:0]=seg0;4'h1: HEX6[6:0]=seg1;4'h2: HEX6[6:0]=seg2;4'h3: HEX6[6:0]=seg3;4'h4: HEX6[6:0]=seg4;4'h5: HEX6[6:0]=seg5;4'h6: HEX6[6:0]=seg6;4'h7: HEX6[6:0]=seg7;4'h8: HEX6[6:0]=seg8;4'h9: HEX6[6:0]=seg9;4'ha: HEX6[6:0]=sega;4'hb: HEX6[6:0]=segb;4'hc: HEX6[6:0]=segc;4'hd: HEX6[6:0]=segd;4'he: HEX6[6:0]=sege;4'hf: HEX6[6:0]=segf;default:HEX6[6:0]=seg0;endcasealways @(posedge clk_r)case(a_r[7:4])4'h0: HEX7[6:0]=seg0;4'h1: HEX7[6:0]=seg1;4'h2: HEX7[6:0]=seg2;4'h3: HEX7[6:0]=seg3;4'h4: HEX7[6:0]=seg4;4'h5: HEX7[6:0]=seg5;4'h6: HEX7[6:0]=seg6;4'h7: HEX7[6:0]=seg7;4'h8: HEX7[6:0]=seg8;4'h9: HEX7[6:0]=seg9;4'ha: HEX7[6:0]=sega;4'hb: HEX7[6:0]=segb;4'hc: HEX7[6:0]=segc;4'hd: HEX7[6:0]=segd;4'he: HEX7[6:0]=sege;4'hf: HEX7[6:0]=segf;default:HEX7[6:0]=seg0;endcaseendmodule第二位数B模块:module regb (clk,clk_r,rst,sw_ab,b_r,HEX5,HEX4); input [7:0] sw_ab;input clk,clk_r,rst;output [7:0] b_r;reg [7:0] b_r;output reg[6:0] HEX5,HEX4;reg [3:0] cnt;always @(posedge clk or negedge rst)if(!rst) cnt<=1'd0;else if(cnt==5) cnt<=1'd0;else cnt<=cnt+1'd1;always @(posedge clk or negedge rst)if(!rst) b_r=0;else if(cnt==2) b_r=sw_ab;else b_r=b_r;parameter seg0=7'b1000000,seg1=7'b1111001,seg2=7'b0100100,seg3=7'b0110000,seg4=7'b0011001,seg5=7'b0010010,seg6=7'b0000010 ,seg7=7'b1111000,seg8=7'b0000000,seg9=7'b0010000,sega=7'b0001000,segb=7'b0000011 ,segc=7'b1000110,segd=7'b0100001,sege=7'b0000110,segf=7'b0001110;always @(posedge clk_r)case(b_r[3:0])4'h0: HEX4[6:0]=seg0;4'h1: HEX4[6:0]=seg1;4'h2: HEX4[6:0]=seg2;4'h3: HEX4[6:0]=seg3;4'h4: HEX4[6:0]=seg4;4'h5: HEX4[6:0]=seg5;4'h6: HEX4[6:0]=seg6;4'h7: HEX4[6:0]=seg7;4'h8: HEX4[6:0]=seg8;4'h9: HEX4[6:0]=seg9;4'ha: HEX4[6:0]=sega;4'hb: HEX4[6:0]=segb;4'hc: HEX4[6:0]=segc;4'hd: HEX4[6:0]=segd;4'he: HEX4[6:0]=sege;4'hf: HEX4[6:0]=segf;default:HEX4[6:0]=seg0;endcasealways @(posedge clk_r)case(b_r[7:4])4'h0: HEX5[6:0]=seg0;4'h1: HEX5[6:0]=seg1;4'h2: HEX5[6:0]=seg2;4'h3: HEX5[6:0]=seg3;4'h4: HEX5[6:0]=seg4;4'h5: HEX5[6:0]=seg5;4'h6: HEX5[6:0]=seg6;4'h7: HEX5[6:0]=seg7;4'h8: HEX5[6:0]=seg8;4'h9: HEX5[6:0]=seg9;4'ha: HEX5[6:0]=sega;4'hb: HEX5[6:0]=segb;4'hc: HEX5[6:0]=segc;4'hd: HEX5[6:0]=segd;4'he: HEX5[6:0]=sege;4'hf: HEX5[6:0]=segf;default:HEX5[6:0]=seg0;endcaseendmodule运算模块:module alur(clk,rst,alu_out,a_r,b_r,opcode,zero);output [7:0] alu_out;output zero;input [7:0] a_r,b_r;input [2:0] opcode;input clk,rst;reg [7:0] alu_out;reg [3:0] cnt;parameterquA=3'b000,quB=3'b001,ADD=3'b010,DEC=3'b011,ANDD=3'b100,XORR=3'b101,XOR=3'b110, NXOP=3'b111;assign zero=!a_r;always @(posedge clk or negedge rst)if(!rst) cnt<=1'd0;else if(cnt==5) cnt<=1'd0;else cnt<=cnt+1'd1;always @(posedge clk or negedge rst)if(!rst) alu_out=0;else if(cnt==3) begincasex(opcode)quA: alu_out<=a_r;quB: alu_out<=b_r;ADD: alu_out<=a_r+b_r;DEC: alu_out<=a_r-b_r;ANDD: alu_out<=a_r&b_r;XORR: alu_out<=a_r|b_r;XOR: alu_out<=a_r^b_r;NXOP: alu_out<=a_r^~b_r;default: alu_out<=8'bxxxx_xxxx;endcaseendelse alu_out=0;endmodule结果显示模块:module digital(clk_r,rst,alu_out,HEX1,HEX0);input [7:0] alu_out;input clk_r,rst;output reg[6:0] HEX1,HEX0;parameter seg0=7'b1000000,seg1=7'b1111001,seg2=7'b0100100,seg3=7'b0110000,seg4=7'b0011001,seg5=7'b0010010,seg6=7'b0000010 ,seg7=7'b1111000,seg8=7'b0000000,seg9=7'b0010000,sega=7'b0001000,segb=7'b0000011 ,segc=7'b1000110,segd=7'b0100001,sege=7'b0000110,segf=7'b0001110;always @(posedge clk_r)case(alu_out[3:0])4'h0: HEX0[6:0]=seg0;4'h1: HEX0[6:0]=seg1;4'h2: HEX0[6:0]=seg2;4'h3: HEX0[6:0]=seg3;4'h4: HEX0[6:0]=seg4;4'h5: HEX0[6:0]=seg5;4'h6: HEX0[6:0]=seg6;4'h7: HEX0[6:0]=seg7;4'h8: HEX0[6:0]=seg8;4'h9: HEX0[6:0]=seg9;4'ha: HEX0[6:0]=sega;4'hb: HEX0[6:0]=segb;4'hc: HEX0[6:0]=segc;4'hd: HEX0[6:0]=segd;4'he: HEX0[6:0]=sege;4'hf: HEX0[6:0]=segf;default: HEX0[6:0]=seg0;endcasealways @(posedge clk_r)case(alu_out[7:4])4'h0: HEX1[6:0]=seg0;4'h1: HEX1[6:0]=seg1;4'h2: HEX1[6:0]=seg2;4'h3: HEX1[6:0]=seg3;4'h4: HEX1[6:0]=seg4;4'h5: HEX1[6:0]=seg5;4'h6: HEX1[6:0]=seg6;4'h7: HEX1[6:0]=seg7;4'h8: HEX1[6:0]=seg8;4'h9: HEX1[6:0]=seg9;4'ha: HEX1[6:0]=sega;4'hb: HEX1[6:0]=segb;4'hc: HEX1[6:0]=segc;4'hd: HEX1[6:0]=segd;4'he: HEX1[6:0]=sege;4'hf: HEX1[6:0]=segf; default: HEX1[6:0]=seg0; endcaseendmodule五.仿真实现:整体图:波形图:六.硬件实现:1.引脚图:2.分析结果说明:开关0~2是算法选择,具体算法类型见设计功能第2项开关10~17数字输入,用8位二进制数表示两个十六进制数,每四位表示一位按键0是锁存及运算,当开关10~17输入一个数A时,按下按键0,数据就是锁存,再输入数就是数B,而当数据B也锁存后,再次按下按键0,就会显示运算结果按键1是复位键七.总结:通过这次FPGA实验课让我明白了真正的编程不像是那些C语言小程序那么简单,为了这次实验算是绞尽脑汁,最后为了读懂程序,还去专门找了Verilog语言辅导书,不管过程再怎么复杂曲折,总算是顺利的完成了实验任务,到了现在回顾为期6周的学习过程,也有一些时候是因为上课不认真,为后来的程序设计增加了难度,也有一些原因是因为自己本身能力不足导致设计接连失败,不得不说,也有一部分原因是因为学习实验室的器件不足,限制了实验设计的范围,也使实验难度增加。
数字频率计的设计实验报告

数字频率计的设计实验报告实验名称:数字频率计的设计实验日期:2021年7月1日实验目的:设计并实现一个基于计数器的数字频率计,使用计数器测量输入信号的频率,并将结果显示在数码管上。
实验器材:FPGA开发板、数字频率计模块、计数器模块、数码管模块。
实验原理:1. 计数器模块设计一个计数器模块,用于计数示波器输入脉冲信号的时间。
计数器的计数时间可以根据需要进行调整。
2. 数字频率计模块设计一个数字频率计模块,用于将计数器的计数时间转换为输入信号的频率。
通过计算计数器的计数值来计算频率,并将结果显示在数码管上。
3. 数码管模块设计一个数码管模块,用于将数字频率计模块计算出的频率值转换为可以在数码管上显示的数码。
实验步骤:1. 搭建实验电路将FPGA开发板连接到计数器模块、数字频率计模块和数码管模块。
2. 编写Verilog代码根据上述原理,编写计数器模块、数字频率计模块和数码管模块的Verilog代码。
3. 编译代码并下载到FPGA开发板使用Xilinx Vivado软件将Verilog代码编译成比特流文件,并将比特流文件下载到FPGA开发板中。
4. 测试实验将示波器的输出信号连接到数字频率计的输入端,并将数字频率计连接到数码管。
通过计算数字频率计的输出,验证数字频率计的测量准确性。
实验结果:经过测试,数字频率计的测量准确度在实验误差范围内。
输入不同频率的信号时,数码管能够正确显示频率值。
实验总结:通过本次实验,成功设计并实现了一个基于计数器的数字频率计。
该实验不仅巩固了计数器、数码管等模块的设计知识,也提高了学生的Verilog编程能力。
在实验中,学生还学习了如何使用FPGA开发板进行数字电路实验,以及测试和验证数字电路的方法和技巧。
vivado七段数码管代码及仿真

文章标题:深入探究Vivado中七段数码管代码及仿真在数字电路设计中,七段数码管是一种常见的数字显示装置,广泛应用于计时器、计数器、仪表等设备中。
Vivado是Xilinx公司推出的一款集成化开发环境软件,用于FPGA设计和开发。
本文将深入探讨在Vivado中编写七段数码管的代码以及进行仿真的方法,以便读者能够更深入地理解数字电路设计和Vivado软件的应用。
一、七段数码管的基本原理要理解在Vivado中编写七段数码管的代码,首先需要了解七段数码管的基本原理。
七段数码管由7根发光二极管组成,分别对应数码管的a、b、c、d、e、f、g片段,可以显示0-9以及一些字母。
在数字电路设计中,需要通过操纵七段数码管的每一个片段,来显示需要的数字或字符。
编写七段数码管的代码,实质上是利用FPGA来控制这7个片段的亮灭。
二、Vivado中七段数码管的代码编写在Vivado中,可以使用Verilog或VHDL等硬件描述语言来编写数字电路设计的代码。
对于七段数码管的代码编写,以Verilog为例,可以按照以下步骤进行:1. 定义输入信号2. 分配七个片段对应的输出信号3. 使用组合逻辑进行数字与片段的对应4. 使用时序逻辑进行信号的控制和时序处理以下是一个简单的七段数码管代码示例:```verilogmodule seven_segment(input [3:0] sw,output reg [6:0] seg);always @(*)begincase (sw)4'b0000: seg = 7'b1000000; // 数字0 4'b0001: seg = 7'b1111001; // 数字1 4'b0010: seg = 7'b0100100; // 数字2 // 其他数字的对应关系default: seg = 7'b1111111; // 默认不显示 endcaseendendmodule```三、Vivado中七段数码管的仿真方法在编写七段数码管的代码之后,需要对其进行仿真以验证设计的正确性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四数码管实验
一、实验目的:
1.进一步熟悉Modelsim和ISE仿真工具;
2.掌握7段数码管显示译码器;
3.掌握7段数码管数码管动态输出显示的方法。
二、实验内容:
1.实现按动开关键,在数码管上显示相应的十六进制数0~F。
(参考给定的已有
工程文件Prep-IO)
2.实现开发板上的数码管动态显示0~F。
三、实验要求:
要求首先使用Modelsim软件进行功能仿真,然后使用ISE软件综合,并下载到开发板进行电路功能测试。
四、实验步骤:
1.采用VerilogHDL语言编程实现输入4位BCD码,输出是8位数码管显示码。
程序代码如下:
module Seg7BCD(out, in);
output [7:0] out;
input [3:0] in;
reg [7:0] out;
always@(in)
begin
case(in)
4'h0: out = 8'b00000011;
4'h1: out = 8'b10011111;
4'h2: out = 8'b00100101;
4'h3: out = 8'b00001101;
4'h4: out = 8'b10011001;
4'h5: out = 8'b01001001;
4'h6: out = 8'b01000001;
4'h7: out = 8'b00011111;
4'h8: out = 8'b00000001;
4'h9: out = 8'b00001001;
4'hA: out = 8'b00010001;
4'hB: out = 8'b11000001;
4'hC: out = 8'b01100011;
4'hD: out = 8'b10000101;
4'hE: out = 8'b01100001;
4'hF: out = 8'b01110001;
default: out = 8'hFE;
endcase
end
endmodule
2.用Modelsim进行功能仿真。
测试代码:
module Seg7BCD_tb;
reg [3:0] in;
wire [7:0] out;
Seg7BCD bcd(.in(in),.out(out));
initial
begin
in = 4'h0;
#20 in = 4'h1;
#20 in = 4'h2;
#20 in = 4'h3;
#20 in = 4'h4;
#20 in = 4'h5;
#20 in = 4'h6;
#20 in = 4'h7;
#20 in = 4'h8;
#20 in = 4'h9;
#20 in = 4'hA;
#20 in = 4'hB;
#20 in = 4'hC;
#20 in = 4'hD;
#20 in = 4'hE;
#20 in = 4'hF;
end
endmodule
仿真结果:
3.分别设计4位BCD码自动生成模块和BCD码的译码模块。
4位BCD码生成模块:
module BCDCode( input clk,
input rst,
output reg [3:0] BCDCode
);
always @ (posedge clk)
if (rst) BCDCode = 0;
else BCDCode = BCDCode + 1; endmodule
BCD码的译码模块:
module Seg7BCD(out, in);
output [7:0] out;
input [3:0] in;
reg [7:0] out;
always@(in)
begin
case(in)
4'h0: out = 8'b00000011;
4'h1: out = 8'b10011111;
4'h2: out = 8'b00100101;
4'h3: out = 8'b00001101;
4'h4: out = 8'b10011001;
4'h5: out = 8'b01001001;
4'h6: out = 8'b01000001;
4'h7: out = 8'b00011111;
4'h8: out = 8'b00000001;
4'h9: out = 8'b00001001;
4'hA: out = 8'b00010001;
4'hB: out = 8'b11000001;
4'hC: out = 8'b01100011;
4'hD: out = 8'b10000101;
4'hE: out = 8'b01100001;
4'hF: out = 8'b01110001;
default: out = 8'hFE;
endcase
end
endmodule
4.在顶层文件将2个电路模块实例化,并进行相应的连线。
5.用ISE综合并将电路下载到开发板进行电路功能测试。
五、实验思考
本次实验相对上次实验要难一点,在实验开始一直做不出来,最后仔细看了老师给的例子,照着例子修修改改终于做出来了结果,不过第一次出来的结果有一点瑕疵,就是数码管的小数点是亮的状态,最后把译码模块中控制数码管的小数点的码改为1就好了。
难点是要设计一个时钟分频电路、4位BCD码生成模块和4位BCD码到数码管显示码的译码模块,其中时钟分频电路和4位BCD码生成模块的第一次编写,所以遇到的问题比较多,在克服了这个难题后,这次实验就顺利完成了。