Verilog数码管实验

实验四数码管实验

一、实验目的:

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码生成模块的第一次编写,所以遇到的问题比较多,在克服了这个难题后,这次实验就顺利完成了。

数码管按键计数verilog程序(FPGA CPLD)

module shumaguan(clk,rst,key,control,y); input clk,rst; input key; output control; output[6:0]y; reg control; reg[6:0]y; reg[3:0]i; reg [9:0] keytemp; always@(posedge clk or negedge rst) if(0==rst)begin i<=0;keytemp<=0;y<=127; control<=0;end else begin keytemp<={keytemp[8:0],key}; if(keytemp==10'b1000000000) i<=i+1; control<=1; case(i) //译码程序 4'b0000: y <= 7'b1111_110; 4'b0001: y <= 7'b0110_000; 4'b0010: y <= 7'b1101_101; 4'b0011: y <= 7'b1111_001; 4'b0100: y <= 7'b0110_011; 4'b0101: y <= 7'b1011_011; 4'b0110: y <= 7'b1011_111; 4'b0111: y <= 7'b1110_000; 4'b1000: y <= 7'b1111_111; 4'b1001: y <= 7'b1111_011; default: y <= 7'b0000_000; //display nothing if num > 9 endcase if(i==10) i<=0; end endmodule

实验二 7 段数码管静态显示译码器

实验二7 段数码管静态显示译码器 1.实验目的 学习quartusii 和modelsim的使用方法; 学习原理图和veriloghdl混合输入设计方法; 掌握7 段数码管静态显示译码器的设计及仿真方法。 2.实验原理 根据下面电路图,设计7 段数码管静态显示译码器电路,在kx3c10F+开发板上实现该电路,并作仿真。 3.实验设备 kx3c10F+开发板,电脑。 4.实验步骤 4.1编译 4.1.1七段数码管代码 module segled(out1,a); //定义模块名和输入输出端口 input [3:0]a; //输入一个3位矢量 output [6:0]out1; //输出一个6位矢量 reg [6:0]out1; //reg型变量用于always语句 always@(a) //敏感信号啊 begin case(a) //case语句用于选择输出 4'b0000:out1<=7'b1000000; 4'b0001:out1<=7'b1001111; 4'b0010:out1<=7'b0100100; 4'b0011:out1<=7'b0110000; 4'b0100:out1<=7'b0011001;

4'b0101:out1<=7'b0010010; 4'b0110:out1<=7'b0000011; 4'b0111:out1<=7'b1111000; 4'b1000:out1<=7'b0000000; 4'b1001:out1<=7'b0011000; 4'b1010:out1<=7'b0001000; 4'b1011:out1<=7'b0011100; 4'b1100:out1<=7'b1000111; 4'b1101:out1<=7'b0100011; 4'b1110:out1<=7'b0000110; 4'b1111:out1<=7'b0001110; endcase end endmodule //模块结束 效果图: 4.1.2综合模块代码 // Copyright (C) 1991-2013 Altera Corporation // Your use of Altera Corporation's design tools, logic functions // and other software and tools, and its AMPP partner logic // functions, and any output files from any of the foregoing // (including device programming or simulation files), and any // associated documentation or information are expressly subject // to the terms and conditions of the Altera Program License // Subscription Agreement, Altera MegaCore Function License

verilog模4计数器实验报告

Lab 5 模4递增计数器 王阳IS1102班U201114066 1.实验目的 学会用Quartus 9.1编译Verilog语言的方法和步骤;设计简单的程序,并能运行;了解触发器,并学会利用触发器制作模4递增计数器。 2.实验内容 ●在模4递增计数器中,由cp时钟信号控制输入; ●由两个D触发器组合而得到模4递增计数器; ●简单的模4计数器由cp作为开关控制输入,由Q0和Q1两个LED灯控制输出。 3.代码分析 1)首先,定义module的输入输出接口; 2)然后,建立程序,分为模4递增计数器主块和D触发器块; 3)模4递增计数器的实现分为2个块,如下: 模4递增计数器块: module mo4(Q0,Q1,cp); output Q0,Q1; input cp; d_ff f0(Q0,~Q0,cp);//调用D触发器 d_ff f1(Q1,~Q1,Q0); //调用D触发器 endmodule D触发器块: module d_ff (Q,D,cp);//D触发器块 output Q; input D,cp; reg Q; always @(posedge cp) Q<=D; endmodule

4.实验步骤 1)连接DE0板:连接DE0板的电源线和数据线或直接将数据线接到电脑主机上,打 开开关。 2)创建项目:打开Quartus9.1软件,选择“File—>New Project Wizard”,在弹出的窗 口中输入项目的名称和存储位置。这里笔者将文件储存在桌面的临时文件夹中,并 取名为chufaqi\mo4,如下: 确定输入完成后,单击Next,出现下图:

七段式数码管简介及其Verilog HDL 驱动编写

图1 七段数码管的显示单元 图2.1 共阴极 图2.2 共阳极 a b c d e f g h 七段式数码管就是使用七段点亮的线段来拼成常见的数字和某些字母。再加上右下角的小数点。实际上一个显示单元包含了8根控制信号线。 如上图所示,a,b,c,d,e,f,g,h 对应8根控制信号线。一般数码管有8个如图1所示的显示单元,称为七段八位数码管。由此引入段码和位码的概念。 段码(seg ):在本文中段码对应单独的显示单元。或者说段码代表显示单元上显示的具体数值或符号。 位码(sel ):在本文中位码对应8个显示单元。或者说位码代表相应位置上的显示单元被选通。 为什么数码管需要位码呢? 因为数码管利用视觉暂留效应让人们觉得每一位上的数字一直保持着发亮。其实各个位上的显示单元是按照顺序交替亮灭的,只是频率比较高,看起来就像是一直亮着的。而位码就是用来按位循环扫描的。 段码与显示内容又是怎样对应的呢? 这就要说到显示原理了。每一个显示单元中可以被控制亮灭的线段其实是LED 发光二极管。他们以共阴极或者共阳极的方式接入。如下图2.1和2.2。 b c

clk rst Data[31:0] Turn_off[7:0] Seg[7:0] Sel[2:0] 如果想显示数字0,图1中的线段a,b,c,d,e,f应当点亮,g,h应该熄灭。共阴极接入方式的话,输入端接高电平LED才会亮。abcdefgh对应的电平状态是11111100 。编码时顺序反过来a对应最低位,h对应最高位。 所以在共阴极接入方式下,显示数字0对应的段码是00111111,即0x3f; 在共阳极接入方式下,显示数字0对应的段码是11000000,即0xc0; 图2.1和2.2中的a,b,c,d,e,f, g,h称为段选线。另一边的公共端称为位选线。 显示字母A,B,C,D,E,F分别对应段码:8’h88, 8’h83, 8’hC6, 8’hA1, 8’h86, 8’h8E; 特别的,显示单元全灭对应的段码为:8’b1111_1111即是8’hFF; 至此已经可以编写驱动程序的一个模块了,就是把显示数字转成段码的模块。 先来有一个总体的架构,暂时不对小数点位做处理: 段码seg和位码sel信号由FPGA引脚引出接入数码管,位码只有三位是因为数码管电路中有三八译码器,这样可以节省FPGA的引脚资源。 Turn_off是一个特殊控制信号,它使得这个驱动程序功能更丰富。比如DATA以BCD码形式带来的数据是00523467 。出于某种原因我们不想让00显示出来。就可以通过turn_off 把数码管的最左边两位“关掉”。Turn_off到底是00111111还是11000000取决于个人偏好了。 还要有一个时钟分频模块,因为SEL的扫描频率没必要过高,只要每秒25次循环就可以达到视觉暂留的要求。 Seg7x8_drive

数字式秒表verilog语言实现

一、实验目的 (1)熟练掌握分频器、各种进制的同步计数器的设计。 (2)熟练掌握同步计数器的级联方法。 (3)掌握数码管的动态显示驱动方式。 (4)掌握计数器的功能和应用。 (5)理解开关防颤动的必要性。 (6)掌握简单控制器的设计方法。 二、实验内容和原理 1、实验设计要求: (1)计时范围0’0’.0’’~59’59’.9’’,分辨率为0.1s,用数码管显示计时值。 (2)秒表有一个按键开关:当电路处于“初始”状态时,第一次按键,计时开始(“计时”状态);再次按键。计时停止(“停止”状态);第三次按键,计时器复位为0’0’.0’’,且电路恢复到“初始”状态。 2、根据设计要求,可画出秒表电路的原理框图,如图1-2所示,秒表电路由时钟管理模块(DCM)、分频器模块、按键处理模块、控制器、计时模块和显示模块组成。 图1-2 秒表电路的原理框图 (1)DCM模块 由于数字钟为低速电路,而XUP Virtex-II Pro 开发系统只提供100MHz主时钟,因此需插入DCM分频模块以降低系统的工作时钟,从而提高系统的可靠性。DCM可采用16分频,输出6.25MHz的sys_clk信号作为系统的主时钟。 ISE生成DCM内核的Verilog HDL 代码: VgaDCM DCMInst( .CLKIN_IN(clk), .CLKDV_OUT(sys_clk), .CLKIN_IBUFG_OUT(),

.CLK0_OUT(), .LOCKED_OUT()); (2)分频器模块 产生用于计时的1/10秒脉冲信号pulse10,频率为10Hz ; 产生用于显示模块的扫描脉冲信号pulse400,频率为400Hz 。 1/10秒脉冲信号pulse10和扫描脉冲信号pulse400的脉冲宽度为一个系统主时钟信号sys_clk 的周期。 分频器模块原理框图如图1-3所示,先设计一个15625分频器,产生400Hz 的扫描信号pulse400,再由pulse400控制40分频器产生1/10秒脉冲信号pulse10。 “ 分频器模块的Verilog HDL 代码: module div(sys_clk,sec,scan); //分频器模块 input sys_clk; output sec,scan; div_n1 u1(.cout(scan),.cin(1'b1),.clk(sys_clk)); //按原理框图级联分频器 div_n2 u2(.cout(sec),.cin(scan),.clk(sys_clk)); endmodule module div_n1(cout,cin,clk); // 15625进制计数器,产生400Hz 扫描信号 parameter n=15625; parameter counter_bits=14; output cout; input cin,clk; reg [counter_bits:1]qout=0; assign cout=(qout==(n-1))&cin; //进位 always@(posedge clk) begin if(cin) begin if(qout==(n-1)) qout<=0; else qout<=qout+1;//计数 装 订 线

3.3 基于FPGA的数码管显示控制与LED点阵控制—数电资料文档

3.3 基于FPGA的数码管显示控制与LED点阵控制 1.实验目的 (1)通过实验进一步学习Quartus II软件的使用方法。 (2)通过实验学习数码管显示控制的基本原理。 (3)通过实验学习LED点阵显示控制的基本原理。 2.实验仪器设备 (1)FPGA开发实验箱。 (2)数字万用表。 (3)电脑。 3.预习 (1)复习FPGA开发有关的流程。 (2)复习Verilog HDL语言语法。 (3)复习实验所用的相关原理。 (4)按要求编写实验中要求的硬件描述语言程序。 4.实验原理 (1)数码管。数码管是多个LED灯的集合,显示译码器的输入是二进制数,输出是对应的十进制的字符,因此译码器的输出根据十进制数的字符显示效果来定义,显示译码器有配合共阴极和共阳极的区分,必须根据实际选用。 (2)数码管的动态显示。本实验为LED数码管动态显示控制实验。LED动态显示是将所有相同的段码线并接在一个I/O口上,共阴极端或共阳极端分别由相应的I/O口线控制(本实验箱为共阳极)。由于每一位的段选线都在一个I/O口上,所以每送一个段选码,所有的LED数码管都显示同一个字符,这种显示器是不能用的。解决此问题的方法是利用人的视觉滞留,从段选线I/O口上按位次分别送显示字符的段选码,在位选控制口也按相应的次序分别选通相应的显示位(共阴极送低电平,共阳极送高电平),选通位就显示相应字符,并保持几毫秒的延时,未选通位不显示字符(保持熄灭)。这样,对各位显示就是一个循环过程。从计算机的工作来看,在一个瞬时只有一位显示字符,而其它位都是熄灭的,但因为人的视觉滞留,这种动态变化是觉察不到的。从效果上看,各位显示器能连续而稳定地显示不同的字符,这就是动态显示。

利用verilog语言实现一位数码管动态显示0到F

利用verilog语言实现一位数码管动态显示0到F //深圳市21EDA电子. //开发板型号:A-C8V4 //https://www.360docs.net/doc/0319509557.html,/doc/cc14931631.html, //一位数码管试验 //利用分频计数器得到数码管显示效果,显示0到F。 //视频教程适合我们21EDA电子的所有学习板 module SMG_LED(clk_50M,led_bit,dataout); input clk_50M;//系统时钟50M输入从23脚输入。 output[7:0]dataout;//定义数码管的7段码输出, output led_bit;//一位数码管的位选择使能输出。 reg[7:0]dataout; reg led_bit; reg[27:0]count;//分频计数器 always led_bit<='b0;//是数码管的位选择处于导通状态 //分频计数器 always@(posedge clk_50M) begin count<=count+1;//计数器自加 end always@(posedge clk_50M) begin case(count[27:24]) //case(count[27:24])这一句希望初学者看明白, //修改count[27:24]他们的值,就可以看到数码管变法的速度。//也是分频的关键 //在数码管上面显示0到F 0:dataout<=8'b11000000;//共阳数码管显示0的段码 1:dataout<=8'b11111001;

2:dataout<=8'b10100100;//共阳数码管显示2的段码 3:dataout<=8'b10110000; 4:dataout<=8'b10011001; 5:dataout<=8'b10010010; 6:dataout<=8'b10000010; 7:dataout<=8'b11111000; 8:dataout<=8'b10000000; 9:dataout<=8'b10010000; 10:dataout<=8'b10001000; 11:dataout<=8'b10000011; 12:dataout<=8'b11000110; 13:dataout<=8'b10100001; 14:dataout<=8'b10000110; 15:dataout<=8'b10001110;//共阳数码管显示F的段码endcase end endmodule

6位数码管动态扫描电路的设计 verilog hdl

6位数码管动态扫描电路的设计 verilog hdl 在 Verilog HDL 中,可以使用状态机来实现 6 位数码管的动态扫描电路设计。以下是一个简单的示例代码: ```verilog module dynamic_scan( input clk, input [5:0] data, output [6:0] seg ); // 定义状态枚举 typedef enum { IDLE, DISPLAY } state; // 定义状态变量 state current_state, next_state; // 输出信号寄存器 reg [6:0] seg_r; // 状态转换逻辑 always @(posedge clk) begin current_state <= next_state; end // 状态机下一状态逻辑 always @(*) begin case (current_state) IDLE: begin

if (data[0] == 1'b1) begin next_state = DISPLAY; end else begin next_state = IDLE; end end DISPLAY: begin next_state = IDLE; end endcase end // 数码管显示逻辑 always @(posedge clk) begin case (current_state) IDLE: begin seg_r = 7'b1111111; end DISPLAY: begin seg_r = data; end endcase end // 输出数码管段选信号 assign seg = seg_r; endmodule ``` 在上述代码中,我们使用了一个状态机来控制数码管的显示。在`IDLE`状态下,数码管不显示任何数字。当`data[0]`为高电平时,状态机切换到`DISPLAY`状态,开始显示数字。在`DISPLAY`状态下,我们将输入的`data`值赋值给`seg_r`,并通过`seg`输出到数码管。 请注意,上述代码只是一个简单的示例,实际的数码管动态扫描电路可能需要更多的功

2022年verilog八位十进制计数器实验报告附源代码

8位10进制计数器实验报告 一、实验目旳 ●学习时序逻辑电路 ●学会用verilog语言设计时序逻辑电路 ●掌握计数器旳电路构造 ●掌握数码管动态扫描显示原理 二、实验内容 实现一种8bit十进制(BCD码)计数器 端口设立: 用拨动开关实现复位和使能 LED灯来表达8位数据 用数码管显示16进制旳八位数据 1.复位时计数值为8‘h0 2.复位后,计数器实现累加操作,步长为1,逢9进1,,计数值达到8‘h99后,从0开 始继续计数 3.使能信号为1时正常计数,为0时暂停计数,为1时可继续计数。 4.每0.5s计数值加1 5.8位旳成果显示在LED灯上,其中LED灯亮表达相应旳位为1,LED灯灭表达相应旳 灯为0 6.用isim进行仿真,用forever语句模拟时钟信号输入,并给变量赋值仿真initial语句。 7.用7段数码管旳后两位显示16进制下8位成果。

三、实验成果 烧写成果: 拨动reset开关到1时,LED灯显示10010000,7段数码管显示“90”。 之后拨动WE开关呢,开始计数,LED开始变化并且7段数码管开始计数。从99后达到00,LED重新开始从00000000开始亮,且数码管重新从00开始计数。 之后拨动WE开关,暂停计数,LED暂停亮灭,七段数码管暂停变化,WE拨回1,继续计数。 拨动复位信号时,忽视WE信号,直接复位。 仿真成果: 当输入reset信号时波形变化如下 当达到一种扫描信号旳周期时旳波形如下

当达到一种以上计数信号旳周期时旳波形 实验分析: 实验总体构造和模块间关系如图所示:(其中还需要补上使能信号) 实验原理: 由于规定实现数码管和LED灯旳显示,先考虑LED灯,可以直接由8位输出信号控制,而数码管需要同步显示两个不同旳数字,需要时分复用,即迅速旳交替显示十位和个位,运用人眼旳视觉暂留来达到同步显示。这样就需要两种不同旳频率信号。一种是每0.5s一次,作为计数信号,用脉冲生成器生成,另一种是1ms一次旳扫描信号,用降频器生成,将计数信号输入计数器来计数,并将计数旳值和扫描信号同步输入扫描显示模块。在扫描显示模块里用一种变量值在0和1间交替来指引选择信号选择数码管旳不位数。交替旳条件是收到扫描信号。7段数码管和LED灯都与计数值旳

VerilogHDL七段数码管倒计时效果

实验三七段数码管倒计时效果 一、实验目的和要求 1、了解倒计时控制原理 2、了解模块化设计方法 3、掌握数字系统设计的方法 4、通过仿真器观察输入输出波形,并能在FPGA开发板上实现七段数码管倒计时控制系统 二、实验仪器 1、计算机 2、FPGA实验开发板 三、实验内容 (包括必要的步骤、原理,如状态图等) 七段数码管倒计时程序代码: module top(rst,clk,out,sel,); input rst; input clk; output sel,b; output [6:0]out; wire b; wire [3:0] data; divi a1(clk,rst,b); counter a3(b,rst,data); display a2(data,out,sel); endmodule module divi(clk,rst,newclk); input clk; input rst; output newclk; reg newclk; reg [30:0] count; always@(posedge clk) begin if(!rst)begin count<=0; newclk<=0; //初始化 end else begin count〈=count+1; if(count==25000000)

begin newclk〈=~newclk; count〈=0; end end end endmodule module counter(clk,rst,out); input rst; input clk; output [3:0]out; reg [3:0] out; always@(posedge clk) begin if(!rst) out<=0; else begin out<=out+1; if(out==10) out<=0; end end endmodule module display(in,out,sel); input [3:0] in; output [6:0] out; output sel; reg [6:0] out; always@(in) begin case(in) 0:out=7'b1111_110; 1:out=7’b0110_000; 2:out=7'b1101_101; 3:out=7'b1111_001; 4:out=7’b0110_011; 5:out=7'b1011_011; 6:out=7’b1011_111; 7:out=7’b1110_000; 8:out=7'b1111_111; 9:out=7'b1111_011; default:out=0; endcase end assign sel=0; //控制四个并排的四个七段数码管哪一个亮endmodule

静态数码管显示(可编程)

电子信息与自动化学院《可编程逻辑器件》实验报告学号:姓名:实验名称:数码管静态显示 一、实验原理 七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是四个共阳极型七段数码管。由于七段数码管公共端连接到VCC(共阳极型),当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。 图1数码管原理图 图2程序设计大致流程图 二、实验步骤 1、打开QuartusII软件,新建一个工程然后创建一个Verilog File,打开VHDL编辑对话框进行编程; 2、主要程序如下:

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity JINGTAI is port ( clk:in std_logic; x: out std_logic_vector(6 downto 0); y: out std_logic_vector(3 downto 0)); end JINGTAI; architecture behave of JINGTAI is signal number :integer range 50000000 downto 0; signal count: std_logic_vector (1 downto 0); signal key: std_logic_vector (3 downto 0); begin y<="0000"; PROCESS(clk) begin if clk'event and clk='1' then if number<50000000 then number <= number+1; else number <= 0; key <= key +1; end if; end if; end process; process(key) begin case key is when "0000" => x <= "1000000" ; when "0001" => x <= "1111001" ; when "0010" => x <= "0100100" ; when "0011" => x <= "0110000" ; when "0100" => x <= "0011001" ; when "0101" => x <= "0010010" ; when "0110" => x <= "0000010" ; when "0111" => x <= "1111000" ; when others => null; end case; end process; end behave; 3、引脚锁定 图3 引脚锁定

verilog二进制转十进制

二进制转十进制数码管显示实现全程 1、建立原理图顶层文件 2-1、Verilog程序二进制转十进制 //Decoder: binary-to decimal decoder with an enable control module b2d(y,en,a) ; output [7:0] y ; input en ; input [3:0] a; reg[7:0] y ; always @ (en or a) // EN 和A 是敏感信号 if(!en) // 如果使能信号为低,无效 y = 8'b1111_1111; else begin if(a>9) y<=a+6; //这里完成了二进制到十进制的译码, else y<=a; end //为了方便在平台上进行观察验证 ///这里把数据的个位和十位分别用 4 个LED 进行显示,均为二进制endmodule 2-2、将Verilog程序例化顶层调用 3-1、程序二进制转数码管显示 module decode4_7(decodeout,a); output[6:0] decodeout; input[3:0] a; reg[6:0] decodeout; always @(a) begin case(a) //用 case 语句进行译码 abcdefg 4'h0:decodeout=7'b00000001; 4'h1:decodeout=7'b1001111; 4'h2:decodeout=7'b0010010; 4'h3:decodeout=7'b0000110; 4'h4:decodeout=7'b1001100;

(完整word版)Verilog数字钟设计实验报告

基于FPGA实现多功能数字钟 ——电子系 071180094 王丛屹 摘要 本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,并通过ISE完成综合、仿真.此程序通过下载到FPGA 芯片后,可应用于实际的数字钟显示中,实现了基本的计时显示和设置,调整时间,闹钟设置的功能. [关键词]FPGA;Verilog HDL;数字钟

一、多功能数字钟的设计 设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示.能够利用按键实现“较时”、“较分"功能,随时对数码管的显示进行校正和校对.数字中系统主要由系统时钟,三个功能按键(mode,turn ,change ),FPGA ,数码管和蜂鸣器部分组成。 图: 多功能数字钟总体设计模块 以下就各个模块说明其功能 1. 分频模块

由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法. RTL图如下: 代码如下:

always @(posedge clk_1) if ( cnt2 〈156/2—1)/////////////////////////////////////100分频,生成10000Hz信号begin cnt2 〈= cnt2 + 1; end else begin cnt2 〈= 0; clk_2 <= ~clk_2; end always @(posedge clk_2) if ( cnt5 〈10/2-1) /////////////////////////////////////////10分频,生成1kHz标准信号begin cnt5〈= cnt5 + 1; end else begin cnt5〈= 0; clk_1k〈= ~clk_1k; end always @(posedge clk_2) if ( cnt3 < 100/2—1)//////////////////////////////////////////100分频,生成100Hz信号begin

VerilogLED数码管驱动电路设计

实训2 LED数码管驱动电路设计与实现 一、实训设备、工具与要求 1.实训设备、工具 PC电脑、FPGA开发系统、Quartus II应用软件。 2.实训要求 ⑴每位学生独立完成项目的制作并撰写实训报告; ⑵项目制作完成后由制作者按“验收标准〞测试功能与参数,指导教师验收并登记成绩; ⑶项目经指导教师验收后,由学生将全部实验设备整理后交指导教师验收并登记; ⑷实训完毕后1周内交实训报告。 二、实训涉与的根本知识 2.列表描述共阴七段数码显示电路的输入输出关系和显示结果?

in3 in2 in1 in0 gfedcba 0000 0111111 0 0001 0000110 1 0010 1011011 2 0011 1001111 3 0100 1100110 4 0101 1101101 5 0110 1111100 6 0111 0000111 7 1000 1111111 8 1001 1100111 9 三、实训综合电路〔七段译码器电路框图〕 动态显示电路框图: 模10计数单个数码管显示电路框图: 四、实训步骤 clk rst led[6] led[5] led[4] led[3] led[2] led[1] led[0] scan[3] scan[2] scan[1] scan[0] 信 号 引 89 90 73 74 75 83 85 86 87 97 100 102 104 脚 值86 87 73 74 75 153 81 82 83 96 98 100 102 2.设计应用工程,将十进制的0-9的BCD码转换成七段数码管的显示码〔组合逻辑电路〕 七段LED数码管显示电路的Verilog代码:

基于Verilog语言方案设计书的数码管电子钟

EDA技术及其嵌入式系统设计课程设计 基于MAX+PLUSII平台的 多功能数字钟 设计报告 指导教师: 专业: 姓名: 学号: 目录 一、序言 (2) 二、实验要求及目的 (2) 三、实验原理 (3) 四、运行环境 (3) 五、运行过程 (3) 六、试验结果 (8)

七、各模块源程序 (8) 八、心得体会 (16) 参考文献 (16)

基于MAX+PLUSII数字钟的实现 一序言 电子设计自动化(EDA Electronic Design Automation)技术是一种以计算机作为工作平台,以EDA软件工具为开发环境,以硬件描述语言和原理图描述为设计入口,以可编程逻辑器为实验载体,以ASIC、SOC和SOPC嵌入式系统为设计目标,以数字系统系统设计为应用方向的电子产品自动化设计技术。它是融入了电子技术、计算机技术、信息处理技术、智能化技术等最新成果而开发的高新技术,是现代电子系统设计、制造不可缺少的技术。EDA技术涉及面广,包括描述语言、软件、硬件等方面知识。它的电子仿真软件的仿真功能强大,具有完备的文件库,具有选用元器件创建电路、仿真模拟运行电路的功能,并且在输入信号的加入、输出信号的显示上能完全模拟实际和调制过程中的各种波型和操作过程。因此,EDA可作为辅助实验教育和实验训练的手段之一,以弥补在经费和实验仪器、元器件缺乏情况下的不足,并可节约材料消耗和减少仪器故障,通过仿真可熟悉常用电子仪器的使用方法和测量方法,并锻炼学生电路设计和调试能力,提高学生的分析与解决问题、故障排除的能力,进一步挖掘学生的开发和创新能力。 V erilog HDL是一种优秀的硬件描述语言,尤其在ACIC设计领域更是占主导地位。Verilog HDL与C语言有许多相似之处,并继承和借鉴了C语言的多种操作符和语法结构,有C语言基础的人很快就能够学习并使用该语言。目前国外教学将Verilog HDL作为主要的硬件描述语言,在国内,该语言的使用人数也逐渐增多。 自上而下的电子系统设计是一种传统的设计思路。这种设计思想更符合人们的逻辑思维习惯,也容易是设计者对复杂的系统进行合理的划分以及不断的优化。现代EDA数字控制系统设计充分利用了自上而下的设计思想,并且许多软件都支持高层的设计和仿真。 二、实验要求及目的: 本设计的数字钟,要求显示格式为小时—分钟—秒钟,分别在8个七段LED数码管上以动态分时扫描的方式显示。系统有两个时钟基准,CLK1为4HZ,分频后用来作为计时基准时钟。CLK2为10KHZ,用来作为扫描基准时钟,分频后作为百分秒计时时钟。 附加功能:有调时模式,增加秒表功能。 数字钟的显示格式如图所示: 实验目的: 1.初步了解可编程逻辑器件的基本原理

Verilog实现密码箱实验报告

Verilog实现密码箱 1.功能概述 小脚丫开发板的有4位拨码开关,可以表示数字0-9,有两个七段数码管,所以密码设为两位(00—99),初始密码00,利用四位拨码开关(sw)输入密码,,按下个位确认按键(low),在数码管上显示个位数字;再次输入密码,按下十位确认按键(high),在数码管上显示十位数字。按下确认按键(enter),比较密码正误,若正确,实现开锁功能,用led8灯亮表示;错误,实现报错功能,用led1灯亮表示;连续错三次,实现警报功能,用8个灯全亮表示,此时只有重置(rst)才能重新输入密码。初始密码为21。为保证安全性,只有在开锁状态下,才可修改密码,修改拨码开关数值,按下个位确认按键(low),设置新密码个位,再次修改拨码开关数值,按下个位确认按键(high),设置新密码十位(实际上两个位密码修改与输入顺序不影响)。再按下重置键(rst),即可重新输入密码。同时在使用按键时,注意到了消抖。 2.效果展示 密码错误

密码正确 修改后密码正确

视频展示(双击播放) 3.代码分析 一、密码显示在数码管上always@(*) //数码管显示控制模块begin

case(code_low) 4'd0:seg_led1=9'b000111111;//数码管1显示0 4'd1:seg_led1=9'b000000110;//1 4'd2:seg_led1=9'b001011011;//2 4'd3:seg_led1=9'b001001111;//3 4'd4:seg_led1=9'b001100110;//4 4'd5:seg_led1=9'b001101101;//5 4'd6:seg_led1=9'b001111101;//6 4'd7:seg_led1=9'b000000111;//7 4'd8:seg_led1=9'b001111111;//8 4'd9:seg_led1=9'b001101111;//9 default:seg_led1=9'b100111111;//0 endcase case(code_high) 4'd0:seg_led2=9'b000111111;//数码管2显示0 4'd1:seg_led2=9'b000000110;//1 4'd2:seg_led2=9'b001011011;//2 4'd3:seg_led2=9'b001001111;//3 4'd4:seg_led2=9'b001100110;//4 4'd5:seg_led2=9'b001101101;//5 4'd6:seg_led2=9'b001111101;//6 4'd7:seg_led2=9'b000000111;//7

合工大FPGA实验报告

《电子工程师基本硬件实践技能训练(下)》 实验报告 系(院):计算机与信息学院 专业:通信工程 班级: 姓名: 学号: 指导教师:许良凤吴从中周红平 学年学期: 2018 ~ 2019 学年第一学期 2018年12月23日

实验一 7段数码显示译码器设计 一、实验目的 (1)学习使用Verilog HDL语言设计简单组合逻辑电路。 (2)学习使用case语句来描述真值表。 二、实验设备与器材 GW-PK2 EDA实验箱一台。 三、实验内容及实验步骤 (1)用Verilog HDL设计一个共阴数码管的译码电路,用case语句描述7段译码器的真值表。 (2)编译、综合、适配、下载,验证结果。 (3)进行功能仿真。 (4)设计提示:建议选实验电路模式6,用数码8显示译码输出(PIO46~PIO40),键8、键7、键6、键5四位控制输入,硬件验证译码器的工作性能。注意,在仿真中,4位输入都必须用总线方式给数据。 具体步骤: (1)用文本方式输入设计文件并存盘。 (2)选择目标器件并编译、综合。 (3)进行时序仿真。 (4)锁定引脚,并编译、综合。 (5)在实验箱上选择模式6。 (6)将数据下载到实验箱。 (7)在实验箱上验证7段显示数码器的功能。 实验代码如下 module DECL7S (A,LED7S); input[3:0] A; output[6:0] LED7S; reg[6:0] LED7S; always@(A) case(A) 4'b0000 : LED7S <= 7'B0111111; 4'b0001 : LED7S <= 7'B0000110; 4'b0010 : LED7S <= 7'B1011011; 4'b0011 : LED7S <= 7'B1001111; 4'b0100 : LED7S <= 7'B1100110; 4'b0101 : LED7S <= 7'B1101101; 4'b0110 : LED7S <= 7'B1111101; 4'b0111 : LED7S <= 7'B0000111; 4'b1000 : LED7S <= 7'B1111111; 4'b1001 : LED7S <= 7'B1101111;

相关主题
相关文档
最新文档