资源描述
EDA技术课程设计报告
课程设计任务书
设计题目1:数码管显示数字钟设计
学生姓名
课程名称
EDA技术课程设计
专业班级
地 点
起止时间
2017年6月19日— 6月23日
设计内容
硬件设计及样品制作
设计参数
1、具有时、分、秒,计数显示功能,以24小时循环计时;
2、具有清零,调节小时、分钟功能;
3、具有整点报时功能,整点报时的同时LED花样显示。
设计进度
1. 2017年6月19日—20日 查阅资料,确定设计方案
2. 2017年6月21日—22日 程序设计和硬件调试
3. 2017年6月23日 撰写课程设计报告,答辩
设计成果
1. 设计说明书一份(不少于2000字);
2. 样品一套。
参考资料
1. 周润景等,基于Quartus II的FPGA/CPLD数字系统设计实例,电子工业出版社,2010
2. 夏宇闻,Verilog数字系统设计教程(第二版),北京航空航天大学出版社,2014
说明
1.本表应在每次实施前由指导教师填写一式2份,审批后所在系(部)和指导教师各留1份。2.多名学生共用一题的,在设计内容、参数、要求等方面应有所区别。3.若填写内容较多可另纸附后。
院(系)分管领导: 教研室主任: 指导教师:
2017年 6月 23日
目 录
第1章 引言 1
第2章 电路原理 2
第3章 程序设计 3
3.1 顶层模块设计 3
3.2 时钟分频模块设计 3
3.3 按键驱动模块设计 4
3.4 时钟计数模块设计 4
3.5 整点报时模块 5
3.6 LED灯花样显示模块 7
3.7 数码管显示模块设计 7
第4章 调试、测试分析及结果 10
4.1 调试 10
4.2 测试分析 10
4.3 结果 12
第5章 小结 13
参考文献 14
附录 电路图及程序 15
第1章 引言
EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL或者Verilog HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
此次课程设计我们运用QuartusⅡ这个软件,使用Verilog HDL语言进行编程。
数字钟是一种用数字电路技术实现时、分、秒计时的钟表。与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用单片机来实现电子钟等等。这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,以便于功能的扩展。
本次课程设计要求利用EDA技术,设计一个数码管显示数字钟的样品,数字钟要求具备以下功能:
1、具有时、分、秒,计数显示功能,以24小时循环计时;
2、具有清零,调节小时、分钟功能;
3、具有整点报时功能,整点报时的同时LED花样显示。
第2章 电路原理
数码管显示数字钟设计,运用到8位数码管,要求其中6位数码管动态显示,分别显示时、分、秒的计数,同时对时间进行设置,数字钟的总体功能按照要求可以分为基本的数字时钟显示(具有时、分、秒,计数显示功能,以24小时循环计时)、手动校准(具有清零,调节小时、分钟功能)、整点报时、LED灯花样显示四大部分。其总体功能设计框图如图2.1所示:
数码管显示数字钟
数字时钟显示
手动校准
整点报时
LED灯花样显示
图2.1 数字钟总体功能设计框图
第3章 程序设计
其中,“时钟分频模块”用于对芯片晶振提供的时钟信号进行分频,然后给其他模块分配需要的时钟频率。按键输入的信号经过按键去抖后传送给“时钟计数模块”。正常计数时,“时钟计数模块”将处理好的时、分、秒数据实时传送给“数码管显示模块”,当有来自“按键驱动模块”的信号时,改变相应的时、分、秒计数器中的值,实现调整时间的作用。“数码管显示模块”实时将“时钟计数模块”的数据转换成数码管动态显示信号进行显示。最后,加上一个“整点报时”模块和“LED灯花样显示模块”经过时钟分频信号,传递给“数码管显示模块”,实现所需功能。数字钟设计原理如图3.1所示:
时钟分频模块
按键驱动模块
时钟计数模块
整点报时模块
LED灯花样显示模块
数码管显示模块
图3.1 数字钟设计原理图
3.1 顶层模块设计
顶层模块设计如附录图3所示,其RTL电路图如附录图4所示。
顶层模块包含四个输入:系统时钟输入“clk”,秒设置信号“sset”,分钟设置信号“mmset”,小时设置信号“hset”。一个8位的段选数码管显示值输出“seg”,一个8位的片选数码管显示哪一个数码管输出“dig”,将输出给数码管进行动态显示。“时钟分频模块”电路符号名为“int _ div”,“按键驱动模块”电路符号名慰“an _ jian”,“时钟计数模块”内部采用三格计数器级联的方式分别驱动时、分、秒计数,秒计数器和分计数器均为60进制计数器,小时计数器为24进制计数器,电路符号名分别为两个“ji _ shu _ 60”和一个“ji _ shu _ 24”。
3.2 时钟分频模块设计
“时钟分频模块”直接使用老师上课所给的分频程序,加入两个分频模块,与“时钟计数模块”和“按键驱动模块”进行连接。
3.3 按键驱动模块设计
图3.2 按键驱动模块封装而成的电路元件
按键驱动模块使用原理图方法设计,采用在按键信号传输过程中串联触发器实现按键去抖,保证触发器两次触发的间隔远大于按键抖动的时间,而远小于人动作反应的时间。另外因为实例用独立按键按下后是低电平,所以在触发器后面串联一个非门,使其变为高电平有效。附录图1所示为按键驱动模块原理图,图3.2所示为按键驱动模块封装而成的电路元件。该模块包括四个输入,时钟信号clk,秒设置输入s _ in,分钟设置输入m _ in,小时设置输入h _ in;三个输出,秒设置输出s _ out,分钟设置输出m _ out,小时设置输出h _ out。
从该模块的原理图可以看出,时、分、秒三个按键的去抖原理完全一样,这里提取小时输入和输出进行仿真验证,得到的结果如图4.1所示,每一个时钟上升沿h _ out的值都保持和h _ in的值相反,该设计能够达到预期设计要求。
3.4 时钟计数模块设计
如附录图2所示。“时钟计数模块”内部采用三个计数器级联的方式分别驱动时、分、秒计数,秒计数器和分钟计数器均为60进制计数器,小时计数器为24进制计数器,为方便驱动数码管,三个计数器的输出均为两位的十进制数据。秒调整信号通过一个或门和秒进位信号一起驱动分钟计数器;小时调整和分钟调整同理。
60进制计数器主要Verilog HDL代码如下:
begin
if(!rst) //0
begin
q1<=0; q2<=0;
end
else
begin q1[3:0]=q1[3:0]+1; co<=0;
if(q1[3:0]>9) begin q1[3:0]=0;
q2[3:0]=q2[3:0]+1;
if(q2[3:0]>5) begin q2[3:0]=0; co<=1;end
end
else q1=q1;
end
end
24进制计数器主要Verilog HDL代码如下:
begin
co=0;
q1[3:0]=q1[3:0]+1;
if(q1[3:0]>9) begin q1[3:0]=0; q2[3:0]=q2[3:0]+1; end
if(q1==4)if(q2==2) begin q1=0;q2=0; end
end
如图4.2所示该模块中60进制模块与24进制模块的仿真波形,60进制模块设置qs0、qs1分别为个位、十位,个位计数到9之后清零,十位计数到5之后清零,24进制模块设置qh0、qh1分别为个位、十位,个位计数到9之后清零,十位计数到2之后清零。
3.5 整点报时模块
整点报时模块的设计思路是当数字钟计数到一个整点时间时,蜂鸣器开始响鸣。蜂鸣器的封装设计如图3.3所示,程序设计为一段乐谱,主要Verilog HDL代码如下:
图3.3 蜂鸣器封装模块
always @(posedge clk_4Hz)
begin
case(j)
'd1:origin='d4916; //low
'd2:origin='d6168;
'd3:origin='d7281;
'd4:origin='d7791;
'd5:origin='d8730;
'd6:origin='d9565;
'd7:origin='d10310;
'd8:origin='d010647; //middle
'd9:origin='d011272;
'd10:origin='d011831;
'd11:origin='d012087;
'd12:origin='d012556;
'd13:origin='d012974;
'd14:origin='d013346;
'd15:origin='d13516; //high
'd16:origin='d13829;
'd17:origin='d14108;
'd18:origin='d11535;
'd19:origin='d14470;
'd20:origin='d14678;
'd21:origin='d14864;
default:origin='d011111;
endcase
end
always @(posedge clk_4Hz) //乐谱
begin
if(len==63)
len=0;
else
len=len+1;
case(len)
0:j=3;1:j=3;2:j=3;3:j=3;4:j=5;5:j=5;6:j=5;7:j=6;8:j=8;9:j=8;10:j=8;11:j=6;12:j=6;13:j=6;14:j=6;15:j=12;16:j=12;17:j=12;18:j=15;19:j=15;20:j=15;21:j=15;22:j=15;23:j=9;24:j=9;25:j=9;26:j=927:j=9;28:j=9;29:j=9;30:j=9;31:j=9;32:j=9;33:j=9;34:j=10;35:j=7;36:j=7;37:j=6;38:j=6;39:j=5;40:j=5;41:j=5;42:j=6;43:j=8;44:j=8;45:j=9;46:j=9;47:j=3;48:j=3;49:j=8;50:j=8;51:j=8;52:j=5;53:j=5;54:j=8;55:j=5;56:j=5;57:j=5;58:j=5;59:j=5;60:j=5;61:j=5;62:j=5;63:j=5;
endcase
end
3.6 LED灯花样显示模块
LED灯花样显示模块是与整点报时模块同时工作,当蜂鸣器响鸣时LED灯闪烁。该模块设计思路较为简单,只需在时分秒的时钟输出端接入一个以低电平驱动的LED邓即可实现。
3.7 数码管显示模块设计
数码管动态显示的原理是利用人眼的视觉停留,依次点亮每个数码管的位选信号,当第一个数码管被点亮时,将段选信号变为第一个数码管要显示的信息,当第二个数码管被点亮时,将段选信号变为第二个数码管要显示的信息,以此类推,循环扫描。当循环扫描一次所有数码管所用的时间在人眼能反应出图像变化的时间(约为0.02秒)之内时,人自然就会在视觉上看到完整的图像,而不会感到闪烁。
“数码管显示模块”的作用就是将6位10进制的时间数据BCD码转化成供数码管动态显示的位选和段选数据。该模块在Verilog HDL语言描述下的主要段落如下:
always @(posedge clk_1k)
begin
case(count) //选择扫描显示数据
3'd0:disp_dat = d0; //第一个数码管
3'd1:disp_dat = d1; //第二个数码管
3'd2:disp_dat = 4'hf; //第三个数码管
3'd3:disp_dat = d2; //第四个数码管
3'd4:disp_dat = d3; //第五个数码管
3'd5:disp_dat = 4'hf; //第六个数码管
3'd6:disp_dat = d4;//d[7:4]; //第七个数码管
3'd7:disp_dat = d5;//d[3:0]; //第八个数码管
endcase
case(count) //选择数码管显示位
3'd0:dig_r = 8'b01111111; //选择第一个数码管显示
3'd1:dig_r = 8'b10111111; //选择第二个数码管显示
3'd2:dig_r = 8'b11011111; //选择第三个数码管显示
3'd3:dig_r = 8'b11101111; //选择第四个数码管显示
3'd4:dig_r = 8'b11110111; //选择第五个数码管显示
3'd5:dig_r = 8'b11111011; //选择第六个数码管显示
3'd6:dig_r = 8'b11111101; //选择第七个数码管显示
3'd7:dig_r = 8'b11111110; //选择第八个数码管显示
endcase
end
如图3.4所示是“数码管显示模块”的封装图,输入包括时钟信号“clk”,复位信号“clr”;数码管显示数据BCD码输入,由低位到高位依次为“d0”、“d1”、“d2”、“d3”、“d4”、“d5”。输出包括:一个8位的段选数码管显示值输出“seg”,一个8位的片选数码管显示哪一个数码管输出“dig”。
图3.4 数码管显示模块
第4章 调试、测试分析及结果
4.1 调试
调试使用的是睿智FPGA开发板,开发板采用核心板与接口板分离的方式,核心板上除FPGA,各类存储器以及用户扩展PACK外,还有按键、LED及电源插座等。因为有用户扩展PACK,核心板完全可以脱离接口板而单独使用,通过PACK,用于自己的设计或电子设计大赛,扩展性很好。接口板上集成了最常用和最经典外围接口,所有的外设经过精心分配及设计,不需要进行任何跳线设置,实验时非常方便!总之,睿智开发板是完全站在用户的角度精心设计开发,简约不简单!同时,睿智FPGA开发板的配套光盘提供相当丰富的实验代码及各种参考文献。
4.2 测试分析
按键驱动模块波形仿真分析:
图4.1 波形仿真结果
时、分、秒三个按键的去抖原理完全一样,这里提取小时输入和输出进行波形仿真验证,每一个时钟上升沿h _ out的值都保持和h _ in的值相反,该设计能够达到预期设计要求。按键所绑的开关在开发板上是S1、S2、S3,分别控制小时进位、分钟进位、秒清零。
60进制和24进制模块(时、分、秒模块)波形仿真分析:
图4.2 波形仿真结果
这里提取60进制模块与24进制模块的仿真波形,60进制模块设置qs0、qs1分别为个位、十位,个位计数到9之后清零,十位计数到5之后清零,24进制模块设置qh0、qh1分别为个位、十位,个位计数到9之后清零,十位计数到2之后清零。该设计能够达到预期设计效果。
图4.3 按下S3,秒清零,LED1亮
图4.4 按下S2,分钟进位,LED2亮,蜂鸣器响
4.3 结果
图4.5 按下S1,小时进位,LED3亮
图4.6 整点报时,蜂鸣器响1minute
第5章 小结
在此次课程设计中,遇到的问题主要有以下几个方面:
(1)由于Verilog HDL这门语言对自己来说属于一个从未接触过的东西,所以学习起来比较困难。此次课程设计选择的课题是数码管显示数字钟,开始是资料的搜集与设计思路的理清,再有了一定的基础之后,开始对整个大的模块进行分模块分析设计。
(2)在实验的过程中,遇到了许多的问题,首先发现自己对软件的运用上存在的一些问题,如刚开始的时候没有生成功能网表,导致最后运行出错;还有没有选功能仿真的时候,波形出现了一些毛刺和延时。
(3)设计60进制计数器和24进制计数器也发生了一些问题,原本的设计思路是将个位数字与十位数字分别拆开,用进位信号控制输出,但发现在连接蜂鸣器模块时,进位信号延时太短,导致秒计数器计数计到59以后分钟计数器进位但蜂鸣器和LED灯没有反应,手动按键却可以控制蜂鸣器报警和LED灯闪烁。
实验过程中,遇到的小问题不计其数,在多方努力之下,问题基本解决,这里就不一一列举。总结出的宝贵经验就是要多看书,学会自己解决问题,一般的问题在看书找资料之后基本都能解决;还有就是一定要细心,这样可以避免很多不必要的麻烦。
对于这一个课程,我依然属于半懂不懂的状态,在今后的学习中,对老师的建议就是可以在刚开始上课的时候就可以给同学布置一些小的作业,然后可以让同学慢慢接触一下软件,学一点浅显的编程,这样在最后写大作业的时候就不会感觉无从下手,以便起到一个循序渐进的作用。
参考文献
1、周润景等,基于Quartus II的FPGA/CPLD数字系统设计实例,电子工业出版社,2010
2、夏宇闻,Verilog数字系统设计教程(第二版),北京航空航天大学出版社,2014
附录 电路图及程序
1. 时钟分频模块
module int_div(clock,clk_out);
input clock; //输入时钟
output clk_out; //输出时钟
//内部寄存器
reg clk_p; //上升沿输出时钟
reg clk_n; //下降沿输出时钟
reg[F_WIDTH - 1:0] count_p; //上升沿脉冲计数器
reg[F_WIDTH - 1:0] count_n; //下降沿脉冲计数器
//参数--分频系数
parameter F_DIV = 48000000; //分频系数<<<<-----修改这里
parameter F_WIDTH = 32; //分频计数器宽度
wire full_p; //上升沿计数满标志
wire half_p; //上升沿计数半满标志
wire full_n; //下降沿计数满标志
wire half_n; //下降沿计数半满标志
//判断计数标志位置位与否
assign full_p = (count_p < F_DIV - 1);
assign half_p = (count_p < (F_DIV>>1) - 1);
assign full_n = (count_n < F_DIV - 1);
assign half_n = (count_n < (F_DIV>>1) - 1);
//时钟输出
assign clk_out = (F_DIV == 1) ?
clock : (F_DIV[0] ? (clk_p & clk_n) : clk_p);
//上升沿脉冲计数
always @(posedge clock)
begin
if(full_p)
begin
count_p <= count_p + 1'b1;
if(half_p)
clk_p <= 1'b0;
else
clk_p <= 1'b1;
end
else
begin
count_p <= 0;
clk_p <= 1'b0;
end
end
//下降沿脉冲计数
always @(negedge clock)
begin
if(full_n)
begin
count_n <= count_n + 1'b1;
if(half_n)
clk_n<= 1'b0;
else
clk_n <= 1'b1;
end
else
begin
count_n <= 0;
clk_n<= 1'b0;
end
end
endmodule
2. 按键驱动模块
附录图1 按键驱动模块原理图
3. 时钟计数模块
3.1 60进制计数器模块(控制分钟、秒)
module ji_shu_60(clk,q1,q2,co,rst);
output [3:0]q1,q2;
output co;
input clk,rst;
reg [3:0]q1=0,q2=0;
reg co;
always @(posedge clk or negedge rst )
begin
if(!rst) //0
begin
q1<=0; q2<=0;
end
else
begin q1[3:0]=q1[3:0]+1; co<=0;
if(q1[3:0]>9) begin q1[3:0]=0;
q2[3:0]=q2[3:0]+1;
if(q2[3:0]>5) begin q2[3:0]=0; co<=1;end
end
else q1=q1;
end
end
//assign co=(({q2,q1}==8'b01011001) ? 1:0);
endmodule
3.2 24进制计数器模块(控制小时)
module ji_shu_24(clk,q1,q2);
output [3:0]q1,q2;input clk;
reg [3:0]q1=0,q2=0;reg co;
always @(posedge clk )
begin
co=0;q1[3:0]=q1[3:0]+1;
if(q1[3:0]>9)
begin q1[3:0]=0;q2[3:0]=q2[3:0]+1; end
if(q1==4)if(q2==2)
begin q1=0;q2=0; end
end
附录图2 时钟计数模块内部原理图
endmodule
4. 整点报时模块
module buffer_music ( audio , sys_CLK ,button);
output audio; input sys_CLK; input button;
reg [23:0] counter4Hz,counter1MHz,counter6MHz;
reg [13:0] count,origin;
reg audiof;
reg clk_6MHz,clk_4Hz;
reg clk_1MHz;
reg [4:0] j;
reg [7:0] len;
//assign audio=audiof ; //控制开关
assign audio= button? audiof : 1'b1 ;//控制开关
always @(posedge sys_CLK) //6MHz分频 开发板晶振为50MHz
begin
if(counter6MHz==4)
begin
counter6MHz=0;
clk_6MHz=~clk_6MHz;
end
else
begin
counter6MHz=counter6MHz+1;
// end
end
end
//
always @(posedge sys_CLK) //4Hz分频
begin
// if(counter4Hz==2500000)
if(counter4Hz==6250000) //50M/4/2
begin
counter4Hz=0;
clk_4Hz=~clk_4Hz;
end
else
begin
counter4Hz=counter4Hz+1;
end
end
always @(posedge clk_6MHz)
begin
if(count==16383)
begin
count=origin;
audiof=~audiof;
end
else
count=count+1;
end
always @(posedge clk_4Hz)
begin
case(j)
'd1:origin='d4916; //low
'd2:origin='d6168;
'd3:origin='d7281;
'd4:origin='d7791;
'd5:origin='d8730;
'd6:origin='d9565;
'd7:origin='d10310;
'd8:origin='d010647; //middle
'd9:origin='d011272;
'd10:origin='d011831;
'd11:origin='d012087;
'd12:origin='d012556;
'd13:origin='d012974;
'd14:origin='d013346;
'd15:origin='d13516; //high
'd16:origin='d13829;
'd17:origin='d14108;
'd18:origin='d11535;
'd19:origin='d14470;
'd20:origin='d14678;
'd21:origin='d14864;
default:origin='d011111;
endcase
end
always @(posedge clk_4Hz) //乐谱
begin
if(len==63)
len=0;
else
len=len+1;
case(len)
0:j=3;1:j=3;2:j=3;3:j=3;4:j=5;5:j=5;6:j=5;7:j=6;8:j=8;9:j=8;10:j=8;11:j=6;12:j=6;13:j=6;14:j=6;15:j=12;16:j=12;17:j=12;18:j=15;19:j=15;20:j=15;21:j=15;22:j=15;23:j=9;24:j=9;25:j=9;26:j=927:j=9;28:j=9;29:j=9;30:j=9;31:j=9;32:j=9;33:j=9;34:j=10;35:j=7;36:j=7;37:j=6;38:j=6;39:j=5;40:j=5;41:j=5;42:j=6;43:j=8;44:j=8;45:j=9;46:j=9;47:j=3;48:j=3;49:j=8;50:j=8;51:j=8;52:j=5;53:j=5;54:j=8;55:j=5;56:j=5;57:j=5;58:j=5;59:j=5;60:j=5;61:j=5;62:j=5;63:j=5;
endcase
end
endmodule
5. 数码管显示模块
module scan_led(clk_1k,d0,d1,d2,d3,d4,d5,dig,seg); //模块名scan_led
input clk_1k; //输入时钟
input[3:0] d0,d1,d2,d3,d4,d5; //输入要显示的数据
output[7:0] dig; //数码管选择输出引脚
output[7:0] seg; //数码管段输出引脚
reg[7:0] seg_r; //定义数码管输出寄存器
reg[7:0] dig_r; //定义数码管选择输出寄存器
reg[3:0] disp_dat; //定义显示数据寄存器
reg[2:0]count; //定义计数寄存器
assign dig = dig_r; //输出数码管选择
assign seg = seg_r; //输出数码管译码结果
always @(posedge clk_1k) //定义上升沿触发进程
begin
count <= count + 1'b1;
end
always @(posedge clk_1k)
begin
case(count) //选择扫描显示数据
3'd0:disp_dat = d0; //第一个数码管
3'd1:disp_dat = d1; //第二个数码管
3'd2:disp_dat = 4'hf; //第三个数码管
3'd3:disp_dat = d2; //第四个数码管
3'd4:disp_dat = d3; //第五个数码管
3'd5:disp_dat = 4'hf; //第六个数码管
3'd6:disp_dat = d4;//d[7:4]; //第七个数码管
3'd7:disp_dat = d5;//d[3:0]; //第八个数码管
endcase
case(count) //选择数码管显示位
3'd0:dig_r = 8'b01111111; //选择第一个数码管显示
3'd1:dig_r = 8'b10111111; //选择第二个数码管显示
3'd2:dig_r = 8'b11011111; //选择第三个数码管显示
3'd3:dig_r = 8'b11101111; //选择第四个数码管显示
3'd4:dig_r = 8'b11110111; //选择第五个数码管显示
3'd5:dig_r = 8'b11111011; //选择第六个数码管显示
3'd6:dig_r = 8'b11111101; //选择第七个数码管显示
3'd7:dig_r = 8'b11111110; //选择第八个数码管显示
endcase
end
always @(disp_dat)
begin
case(disp_dat) //七段译码
4'h0:seg_r = 8'hc0; //显示0
4'h1:seg_r = 8'hf9; //显示1
4'h2:seg_r = 8'ha4; //显示2
4'h3:seg_r = 8'hb0; //显示3
4'h4:seg_r = 8'h99; //显示4
4'h5:seg_r = 8'h92; //显示5
4'h6:seg_r = 8'h82; //显示6
4'h7:seg_r = 8'hf8; //显示7
4'h8:seg_r = 8'h80; //显示8
4'h9:seg_r = 8'h90; //显示9
4'ha:seg_r = 8'h88; //显示a
4'hb:seg_r = 8'h83; //显示b
4'hc:seg_r = 8'hc6; //显示c
4'hd:seg_r = 8'ha1; //显示
展开阅读全文