版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数字钟和频率计设计
6.1数字钟设计6.2数字频率计
6.1数 字 钟 设 计
数字钟设计的关键在于产生秒脉冲、对秒脉冲计数并产生分和小时以及动态显示时、分、秒信息。
实验要求:
(1)在开发板上运行有关程序。
(2)设计一个完整的数字钟,小时和分钟用数码管显示,秒用发光二极管闪烁显示,每秒闪烁一次。如有可能,请增加校时功能。
Basys2板上只有4个数码管,因此这里只设计了一个秒和分计时时钟。6.1.1采用8421BCD码计数的Verilog时钟程序
下面是采用8421BCD计数,并在一个模块中实现时钟功能的Verilog程序。时钟程序比较简单,可以用一个模块直接实现。由主时钟(50MHz)分频得到秒信号,计秒到60时分加1,秒清零,计分到60时,分清零。请读者分析,为什么程序从表面上看秒和分都是计到59时就清零了,而不是计到60再清零。
moduleClock_Sec_Min_disp(
inputwireclk,
inputwireclr,
outputSecond_Flash,
outputreg[6:0]a_to_g,
outputreg[3:0]an
);
//中间变量定义
reg[3:0]LED0_num,LED1_num,LED2_num,LED3_num;
reg[1:0]s;
reg[3:0]digit;
reg[16:0]clkdiv; //(1FFFF)*20ns=2.6ms
reg[26:0]q1; //设一足够长的计数器
regsec;
reg[3:0]Second_L;
reg[3:0]Second_H;
reg[3:0]Minute_L;
reg[3:0]Minute_H;
//初始化
initialbegin
Second_L=5;
Second_H=5;
Minute_L=8;
Minute_H=5;
LED3_num=Second_L;
LED2_num=Second_H;
LED1_num=Minute_L;
LED0_num=Minute_H;
end
//动态数码管扫描显示
always@(*)
begin
an=4'b1111; //禁止所有数码管显示
s<=clkdiv[16:15];//间隔2.6ms使能An
an[s]=0;//根据s使能数码管其中之一
case(s)//根据s取对应的数码管上要显示的数据
0:digit<=LED0_num[3:0];
1:digit<=LED1_num[3:0];
2:digit<=LED2_num[3:0];
3:digit<=LED3_num[3:0];
default:digit<=LED3_num[3:0];
endcase
case(digit) //七段译码表
0:a_to_g=7'b0000001;
1:a_to_g=7'b1001111;
2:a_to_g=7'b0010010;
3:a_to_g=7'b0000110;
4:a_to_g=7'b1001100;
5:a_to_g=7'b0100100;
6:a_to_g=7'b0100000;
7:a_to_g=7'b0001111;
8:a_to_g=7'b0000000;
9:a_to_g=7'b0000100;
'hA:a_to_g=7'b0001000;
'hB:a_to_g=7'b1100000;
'hC:a_to_g=7'b0110001;
'hD:a_to_g=7'b1000010;
'hE:a_to_g=7'b0110000;
'hF:a_to_g=7'b0111000;
default:a_to_g=7'b0000001;//0
endcase
end
//主时钟计数:50MHz时钟,周期20ns,计数到1FFFFh时长2621420ns,约2.6ms
always@(posedgeclk)
begin
clkdiv<=clkdiv+1;
end
//时钟程序:计数到50000000为1s,计秒得分
always@(posedgeclkorposedgeclr)
begin
if(clr==1)
begin
q1<=0;
LED0_num=0;
LED1_num=0;
LED2_num=0;
LED3_num=0;
Second_L<=0;
Second_H<=0;
Minute_L<=0;
Minute_H<=0;
end
elseif(q1==50000000)
begin
q1<=0;
sec=~sec;
LED3_num[3:0]=Second_L[3:0];
LED2_num[3:0]=Second_H[3:0];
LED1_num[3:0]=Minute_L[3:0];
LED0_num[3:0]=Minute_H[3:0];
Second_L<=Second_L+1;
if(Second_L==9)
begin
Second_L<=0;
Second_H<=Second_H+1;
end
if(Second_H==5&&Second_L==9)
begin
Second_L<=0;
Second_H<=0;
Minute_L<=Minute_L+1;
if(Minute_L==9)
begin
Minute_L<=0;
Minute_H<=Minute_H+1;
end
if(Minute_H==5&&Minute_L==9)
begin
Minute_L<=0;
Minute_H<=0;
end
end
end
else
q1<=q1+1;
end
assignSecond_Flash=sec;//1Hz
endmodule约束文件如下:
#Basys2约束文件:
NET“a_to_g[0]”LOC=M12;
NET“a_to_g[1]”LOC=L13;
NET“a_to_g[2]”LOC=P12;
NET“a_to_g[3]”LOC=N11;
NET“a_to_g[4]”LOC=N14;
NET“a_to_g[5]”LOC=H12;
NET“a_to_g[6]”LOC=L14;
NET“an[0]”LOC=K14;
NET"an[1]"LOC=M13;
NET"an[2]"LOC=J12;
NET"an[3]"LOC=F12;
NET"clk"LOC="B8"; //50MHz时钟
NET"clr"LOC="P11"; //SW0
NET"Second_Flash"LOC="M5"; //LD06.1.2采用模块化设计Verilog时钟程序
在数字系统中一般采用自上而下的设计方法,将系统分成若干个功能模块,模块还可继续向下划分成子模块,直至分成许多最基本的功能模块。
下面将时钟程序分为秒脉冲发生模块、秒60进制模块、分60进制模块以及动态数码管显示模块。秒60进制模块和分60进制模块的程序是一样的。一个模块设计好后,可以在顶层模块中多次使用,只要改变该模块例化后的模块名称,并给出其相应的输入输出连接即可。
//顶层设计:
moduleClock_top(
inputwireclk,
inputwireclr,
outputSecond_Flash,
output[6:0]a_to_g,
output[3:0]an
);
//模块间连接定义(注意必须是wire)
wire[3:0]Second_L;
wire[3:0]Second_H;
wire[3:0]Minute_L;
wire[3:0]Minute_H;
wirejinwei;
SecondPulseU0(
.clk(clk),
.clr(clr),
.sec(Second_Flash)
);
cnt60U1(
.clk(Second_Flash),
.clr(clr),
.cnt60_L(Second_L),
.cnt60_H(Second_H),
.carry(jinwei)
);
cnt60U2(
.clk(jinwei),
.clr(clr),
.cnt60_L(Minute_L),
.cnt60_H(Minute_H),
.carry(carry)
);
dispU3(
.clk(clk),
.LED0_num(Second_L),
.LED1_num(Second_H),
.LED2_num(Minute_L),
.LED3_num(Minute_H),
.a_to_g(a_to_g),
.an(an)
);
endmodule
//秒脉冲发生模块:
moduleSecondPulse(
inputwireclk,
inputwireclr,
outputregsec
);
//中间变量定义
reg[26:0]q1;//设一足够长的计数器
//时钟程序:计数到25000000输出sec翻转一次,翻转两次为1s
always@(posedgeclkorposedgeclr)
begin
if(clr==1)
q1<=0;
elseif(q1==25000000)
begin
q1<=0;
sec=~sec;
end
else
q1<=q1+1;
end
endmodule
//60进制计数模块:
modulecnt60(
inputwireclk,
inputwireclr,
outputreg[3:0]cnt60_L,
outputreg[3:0]cnt60_H,
outputregcarry
);
//初始化
initialbegin
cnt60_L=8;
cnt60_H=5;
end
//60进制计数器
always@(posedgeclkorposedgeclr)
begin
if(clr==1)
begin
cnt60_L<=0;
cnt60_H<=0;
end
else
begin
carry<=0;
cnt60_L<=cnt60_L+1;
if(cnt60_L==9)
begin
cnt60_L<=0;
cnt60_H<=cnt60_H+1;
end
if(cnt60_H==5&&cnt60_L==9)
begin
cnt60_L<=0;
cnt60_H<=0;
carry<=1;
end
end
end
endmodule
//数码管动态显示模块:
moduledisp(
inputwireclk,
input[3:0]LED0_num,
input[3:0]LED1_num,
input[3:0]LED2_num,
input[3:0]LED3_num,
outputreg[6:0]a_to_g,
outputreg[3:0]an
);
//中间变量定义
reg[1:0]s;
reg[3:0]digit;
reg[16:0]clkdiv;//(1FFFF)*20ns=2.6ms
//动态数码管扫描显示
always@(*)
begin
an=4'b1111; //禁止所有数码管显示
s<=clkdiv[16:15];//间隔2.6ms使能An
an[s]=0; //根据s使能数码管其中之一
case(s)//根据s取对应的数码管上要显示的数据
0:digit<=LED0_num[3:0];
1:digit<=LED1_num[3:0];
2:digit<=LED2_num[3:0];
3:digit<=LED3_num[3:0];
default:digit<=LED3_num[3:0];
endcase
case(digit) //七段译码表
0:a_to_g=7'b0000001;
1:a_to_g=7'b1001111;
2:a_to_g=7'b0010010;
3:a_to_g=7'b0000110;
4:a_to_g=7'b1001100;
5:a_to_g=7'b0100100;
6:a_to_g=7'b0100000;
7:a_to_g=7'b0001111;
8:a_to_g=7'b0000000;
9:a_to_g=7'b0000100;
'hA:a_to_g=7'b0001000;
'hB:a_to_g=7'b1100000;
'hC:a_to_g=7'b0110001;
'hD:a_to_g=7'b1000010;
'hE:a_to_g=7'b0110000;
'hF:a_to_g=7'b0111000;
default:a_to_g=7'b0000001;//0
endcase
end
//主时钟计数:50MHz时钟,周期20ns,计数到1FFFFh时长2621420ns,约2.6ms
always@(posedgeclk)
begin
clkdiv<=clkdiv+1;
end
endmodule
#Basys2约束文件:
NET"a_to_g[0]"LOC=M12;
NET"a_to_g[1]"LOC=L13;
NET"a_to_g[2]"LOC=P12;
NET"a_to_g[3]"LOC=N11;
NET“a_to_g[4]”LOC=N14;
NET“a_to_g[5]”LOC=H12;
NET“a_to_g[6]”LOC=L14;
NET“an[3]”LOC=K14;
NET“an[2]”LOC=M13;
NET“an[1]”LOC=J12;
NET“an[0]”LOC=F12;
NET“clk”LOC=“B8”; // 50 MHz时钟
NET“clr”LOC=“P11”;// SW0
NET"Second_Flash"LOC="M5";// LD0
图6-1为VerilogHDL设计的数字钟的顶层原理图。图6-1用VerilogHDL设计的数字钟的顶层原理图
6.1.3采用状态机设计动态数码管显示的时钟VHDL程序
下面的时钟VHDL程序分为BCD码计时模块和动态数码管显示模块。采用状态机法设计动态数码管显示。显示模块先将输入的十进制数的个位译码,加在七段数码管的段控制线上,在显示扫描时钟的作用下,选通个位上的数码管,个位上的数码管亮,其他数码管灭。然后输出十位上数码管要显示的内容,选通十位上的数码管。这样依次输出各位的译码值,逐个选通数码管。由于扫描频率为1kHz,看起来不会有闪烁的感觉。
--顶层设计:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_unsigned.all;
entityClock_topis
Port(StdClock:inSTD_LOGIC;
Second_Flash:outSTD_LOGIC;
Segments:outSTD_LOGIC_VECTOR(7downto0);
Position:outSTD_LOGIC_VECTOR(3downto0));
endClock_top;
architectureBehavioralofClock_topis
COMPONENTClock_Counter
PORT(
StdClock:INstd_logic;
Second_Flash:OUTstd_logic;
Counter32_16:OUTstd_logic_vector(15downto0)
);
ENDCOMPONENT;
COMPONENTDynamic_Display
PORT(
StdClock:INstd_logic;
DataInput:INstd_logic_vector(15downto0);
Segments:OUTstd_logic_vector(7downto0);
Position:OUTstd_logic_vector(3downto0)
);
ENDCOMPONENT;
signalCounter32_tmp:STD_LOGIC_VECTOR(15downto0);
begin
Inst_Clock_Counter:Clock_CounterPORTMAP(
StdClock=>StdClock,
Second_Flash=>Second_Flash,
Counter32_16=>Counter32_tmp
);
Inst_Dynamic_Display:Dynamic_DisplayPORTMAP(
StdClock=>StdClock,
DataInput=>Counter32_tmp,
Segments=>Segments,
Position=>Position
);
endBehavioral;
--计时模块:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_unsigned.all;
entityClock_Counteris
Port(StdClock:inSTD_LOGIC;
Second_Flash:outSTD_LOGIC;
Counter32_16:outSTD_LOGIC_VECTOR(15downto0));
endClock_Counter;
architectureBehavioralofClock_Counteris
---信号定义
signalcounter25_reg:STD_LOGIC_VECTOR(25downto0);
signalSecond_L:STD_LOGIC_VECTOR(3downto0):="0101";
signalSecond_H:STD_LOGIC_VECTOR(3downto0):="0101";
signalMintue_L:STD_LOGIC_VECTOR(3downto0):="1000";
signalMintue_H:STD_LOGIC_VECTOR(3downto0):="0101";
begin
process(StdClock)
begin
ifrising_edge(StdClock)then
ifcounter25_reg<50000000then--f = 50MHz,T = 20ns,50000000×20ns = 1s
counter25_reg<=counter25_reg+1;
else
counter25_reg<="00000000000000000000000000";
Second_L<=Second_L+1;
ifSecond_L=9then
Second_L<="0000";
Second_H<=Second_H+1;
endif;
ifSecond_H=5andSecond_L=9then
Second_L<="0000";
Second_H<="0000";
Mintue_L<=Mintue_L+1;
ifMintue_L=9then
Mintue_L<="0000";
Mintue_H<=Mintue_H+1;
endif;
ifMintue_H=5andMintue_L=9then
Mintue_L<="0000";
Mintue_H<="0000";
endif;
endif;
endif;
endif;
endprocess;
Counter32_16(3downto0)<=Second_L;
Counter32_16(7downto4)<=Second_H;
Counter32_16(11downto8)<=Mintue_L;
Counter32_16(15downto12)<=Mintue_H;
Second_Flash<=counter25_reg(25);--50000000 = 2FAF080H
endBehavioral;
--采用状态机设计的动态数码管显示模块:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityDynamic_Displayis
Port(StdClock:inSTD_LOGIC;
DataInput:inSTD_LOGIC_VECTOR(15downto0);
Segments:outSTD_LOGIC_VECTOR(7downto0);
Position:outSTD_LOGIC_VECTOR(3downto0));
endDynamic_Display;
architectureBehavioralofDynamic_Displayis
---状态机定义
typestate_typeis(led1,led2,led3,led4);
signalnext_state:state_type;
---信号定义
signalclk1KHz_reg:STD_LOGIC;
signalScanClock_reg:STD_LOGIC;
signaldatacut_reg:STD_LOGIC_VECTOR(3downto0):="0000";
signaldatacut_reg2:STD_LOGIC_VECTOR(3downto0):="0000";
signaldatacut_reg3:STD_LOGIC_VECTOR(3downto0):="0000";
signaldatacut_reg4:STD_LOGIC_VECTOR(3downto0):="0000";
signalposition_reg:STD_LOGIC_VECTOR(3downto0):="1110";
signalsegments_reg:STD_LOGIC_VECTOR(7downto0):="00000000";
---signalDataInput:STD_LOGIC_VECTOR(15downto0):="0101011001111000";---显示5678
----------------------------------------
begin
---由50MHz标准时钟信号分频得到1kHz显示扫描信号
Clk1KHz_Proc:process(StdClock)
variablecnt1:integerrange0to24999;
begin
ifrising_edge(StdClock)then
ifcnt1=24999then
cnt1:=0;
clk1KHz_reg<=notclk1KHz_reg;
else
cnt1:=cnt1+1;
endif;
endif;
endprocess;
ScanClock_reg<=clk1KHz_reg;
---数码管选择处理
Position_Process:process(ScanClock_reg)
begin
ifrising_edge(ScanClock_reg)then
casenext_stateis
---第一个数码管亮
whenled1=>
position_reg<="1110";
datacut_reg<=DataInput(3downto0);
next_state<=led2;
---第二个数码管亮
whenled2=>
position_reg<="1101";
datacut_reg2<=DataInput(7downto4);
datacut_reg<=datacut_reg2;
next_state<=led3;
---第三个数码管亮
whenled3=>
position_reg<="1011";
datacut_reg3<=DataInput(11downto8);
datacut_reg<=datacut_reg3;
next_state<=led4;
---第四个数码管亮
whenled4=>
position_reg<="0111";
datacut_reg4<=DataInput(15downto12);
datacut_reg<=datacut_reg4;
next_state<=led1;
---所有数码管全灭
whenothers=>
position_reg<="0000";
datacut_reg<="1100";
next_state<=led1;
endcase;
endif;
endprocess;
withdatacut_regselect
segments_reg<="10000001"when"0000",---0
"11001111"when"0001",---1
"10010010"when"0010",---2
"10000110"when"0011",---3
"11001100"when"0100",---4
"10100100"when"0101",---5
"10100000"when"0110",---6
"10001111"when"0111",---7
"10000000"when"1000",---8
"10000100"when"1001",---9
"10001000"when"1010",---A
"11100000"when"1011",---B
"10110001"when"1100",---C
"11000010"when"1101",---D
"10110000"when"1110",---E
"10111000"when"1111",---F
"11111111"whenothers;---F.
segments<=segments_reg;
position<=position_reg;
endBehavioral;
#Basys2约束文件:
NET"StdClock"LOC="B8"; //50MHz系统标准时钟引脚
NET"Segments[0]"LOC="M12"; //G
NET"Segments[1]"LOC="L13"; //F
NET"Segments[2]"LOC="P12"; //E
NET"Segments[3]"LOC="N11"; //D
NET"Segments[4]"LOC="N14"; //C
NET"Segments[5]"LOC="H12"; //B
NET“Segments[6]”LOC=“L14”; //A
NET“Segments[7]”LOC=“N13”; //dp
NET“Position[0]”LOC=“F12”; //AN0
NET“Position[1]”LOC=“J12”; //AN1
NET“Position[2]”LOC=“M13”; //AN2
NET“Position[3]”LOC=“K14”; //AN3
NET“Second_Flash”LOC=“M5”; //LD0
用状态机设计的数字钟的顶层原理图如图6-2所示。图6-2用状态机设计的数字钟的顶层图6.1.4采用六十进制计时模块设计的VHDL时钟程序
下面的时钟VHDL程序由顶层设计、时钟分频模块、六十进制计数器、以及显示模块组成。六十进制模块程序例化后,可在顶层设计中多次使用。这里的秒计数器和分计数器都采用的是六十进制计数器的程序。一个VHDL模块例化后,在其模板中有两部分,一部分是COMPONENT(元件)描述部分,另一部分是PORTMAP(端口映射)描述部分。将这两部分拷贝到顶层模块中,只要根据需要进行端口映射(也就是端口连接)即可。
--顶层设计:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
entityclock_sec_min_dispis
Port(clk:inSTD_LOGIC;
clr:inSTD_LOGIC;
second_flash:inoutSTD_LOGIC;
a_to_g:outSTD_LOGIC_VECTOR(6downto0);
an:outSTD_LOGIC_VECTOR(3downto0));
endclock_sec_min_disp;
architectureBehavioralofclock_sec_min_dispis
componentclkdivis
Port(clk:inSTD_LOGIC;
clr:inSTD_LOGIC;
clkout:outSTD_LOGIC);
endcomponent;
componentcnt60is
Port(clk:inSTD_LOGIC;
clr:inSTD_LOGIC;
cnt60_h:outSTD_LOGIC_VECTOR(3downto0);
cnt60_l:outSTD_LOGIC_VECTOR(3downto0);
qc:outSTD_LOGIC);
endcomponent;
componentdisplayis
Port(c60_1_h:inSTD_LOGIC_VECTOR(3downto0);
c60_1_l:inSTD_LOGIC_VECTOR(3downto0);
c60_2_h:inSTD_LOGIC_VECTOR(3downto0);
c60_2_l:inSTD_LOGIC_VECTOR(3downto0);
clk:inSTD_LOGIC;
clr:inSTD_LOGIC;
a_to_g:outSTD_LOGIC_VECTOR(6downto0);
an:outSTD_LOGIC_VECTOR(3downto0));
endcomponent;
signalmclk,qc1,qc2:std_logic;
signalc6011,c6012,c6021,c6022:std_logic_vector(3downto0);
begin
c_div:clkdiv
portmap(clk,clr,mclk);
process(mclk,clr)
begin
if(clr='1')then
second_flash<='0';
elsif(mclk'eventandmclk='1')then
second_flash<=notsecond_flash;
endif;
endprocess;
c_601:cnt60
portmap(mclk,clr,c6011,c6012,qc1);
c_602:cnt60
portmap(qc1,clr,c6021,c6022,qc2);
c_display:display
portmap(c6011,c6012,c6021,c6022,clk,clr,a_to_g,an);
endBehavioral;
--时钟分频模块:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_arith.ALL;
useIEEE.STD_LOGIC_unsigned.ALL;
entityclkdivis
Port(clk:inSTD_LOGIC;
clr:inSTD_LOGIC;
clkout:outSTD_LOGIC);
endclkdiv;
architectureBehavioralofclkdivis
signalq1:std_logic_vector(24downto0);
begin
process(clk,clr)
begin
if(clr='1')then
q1<="0000000000000000000000000";
elsif(clk'eventandclk='1')then
q1<=q1+1;
endif;
endprocess;
clkout<=q1(24);
endBehavioral;
--60进制计数模块:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_arith.ALL;
useIEEE.STD_LOGIC_unsigned.ALL;
entitycnt60is
Port(clk:inSTD_LOGIC;
clr:inSTD_LOGIC;
cnt60_h:inoutSTD_LOGIC_VECTOR(3downto0);
cnt60_l:inoutSTD_LOGIC_VECTOR(3downto0);
qc:outSTD_LOGIC);
endcnt60;
architectureBehavioralofcnt60is
begin
process(clr,clk)
begin
if(clr='1')then
cnt60_h<="0000";
cnt60_l<="0000";
elsif(clk'eventandclk='1')then
qc<='0';
if(cnt60_l="1001")then
cnt60_l<="0000";
cnt60_h<=cnt60_h+1;
else
cnt60_l<=cnt60_l+1;
endif;
if(cnt60_l="1001"andcnt60_h="0101")then
cnt60_l<="0000";
cnt60_h<="0000";
qc<='1';
endif;
endif;
endprocess;
endBehavioral;
--显示模块:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_arith.ALL;
useIEEE.STD_LOGIC_unsigned.ALL;
entitydisplayis
Port(c60_1_h:inSTD_LOGIC_VECTOR(3downto0);
c60_1_l:inSTD_LOGIC_VECTOR(3downto0);
c60_2_h:inSTD_LOGIC_VECTOR(3downto0);
c60_2_l:inSTD_LOGIC_VECTOR(3downto0);
clk:inSTD_LOGIC;
clr:inSTD_LOGIC;
a_to_g:outSTD_LOGIC_VECTOR(6downto0);
an:outSTD_LOGIC_VECTOR(3downto0));
enddisplay;
architectureBehavioralofdisplayis
signalclksweep:std_logic_vector(19downto0);
signals:std_logic_vector(1downto0);
signaldigit:std_logic_vector(3downto0);
begin
process(clk,clr)
begin
if(clr='1')then
clksweep<="00000000000000000000";
elsif(clk'eventandclk='1')then
clksweep<=clksweep+1;
endif;
endprocess;
s<=clksweep(19downto18);
process(s,c60_1_h,c60_1_l,c60_2_h,c60_2_l)
begin
casesis
when"00"=>an<="1110";digit<=c60_2_h;
when"01"=>an<="1101";digit<=c60_2_l;
when"10"=>an<="1011";digit<=c60_1_h;
when"11"=>an<="0111";digit<=c60_1_l;
whenothers=>null;
endcase;
endprocess;
process(digit)
begin
casedigitis
when"0000"=>a_to_g<="0000001";
when"0001"=>a_to_g<="1001111";
when"0010"=>a_to_g<="0010010";
when"0011"=>a_to_g<="0000110";
when"0100"=>a_to_g<="1001100";
when"0101"=>a_to_g<="0100100";
when"0110"=>a_to_g<="0100000";
when"0111"=>a_to_g<="0001111";
when"1000"=>a_to_g<="0000000";
when"1001"=>a_to_g<="0000100";
when"1010"=>a_to_g<="0001000";
when"1011"=>a_to_g<="1100001";
when"1100"=>a_to_g<="0110001";
when"1101"=>a_to_g<="1000010";
when"1110"=>a_to_g<="0110000";
when"1111"=>a_to_g<="0111000";
whenothers=>a_to_g<="0000001";
endcase;
endprocess;
endBehavioral;
#Basys2约束文件:
NET"a_to_g[0]"LOC=M12;
NET"a_to_g[1]"LOC=L13;
NET"a_to_g[2]"LOC=P12;
NET“a_to_g[3]”LOC=N11;
NET“a_to_g[4]”LOC=N14;
NET“a_to_g[5]”LOC=H12;
NET“a_to_g[6]”LOC=L14;
NET“an[0]”LOC=K14;
NET“an[1]”LOC=M13;
NET“an[2]”LOC=J12;
NET“an[3]”LOC=F12;
NET“clk”LOC=“B8”; //50
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宗教场所硅芯管道安装合同
- 森林公园二手房合同五
- 大型医院病人运送升降机租赁合同
- 乡镇卫生院特殊电源施工合同
- 汕头市电影院租赁合同
- 饮用水行业信息化建设规划
- 高新技术企业会计招聘合同
- 电子简易仓库租赁合同
- 求职简历报告模板
- 《狼性营销法则》课件
- 《国有企业管理人员处分条例》考试题库200题(含答案)
- 法医鹰一样的眼睛智慧树知到期末考试答案章节答案2024年南方医科大学
- 蔬菜供货合同电子版
- 中医各家学说(湖南中医药大学)智慧树知到期末考试答案2024年
- 康美药业财务造假PPT课件
- 装饰装修工程质量管理体系与措施
- 温州市房屋租赁合同-通用版
- 第7讲_校对符号使用
- 姬浩然书香家庭申请表(共2页)
- 高中学生遵纪守法主题班会PPT教学讲座课件
- 普通话水平等级测试培训班课程安排表(80学时)
评论
0/150
提交评论