实验一 1位全加器原理图输入设计
一、实验目的
1、熟悉MAX+plusII软件的基本使用方法。
2、熟悉GW48-ES EDA实验开发系统的基本使用方法。 3、了解原理图输入设计方法。
二、实验内容
设计并调试好一个1位二进制全加器,并用GW48-ES EDA实验开发系统(拟采用的实验芯片的型号为EPF10K20TC144-4或EP1K30TC144-3)进行系统仿真、硬件验证。设计1位二进制全加器时要求先用基本门电路设计一个1位二进制半加器,再由基本门电路和1位二进制半加器构成1位二进制全加器。
三、实验条件
1、开发条件:MAX+plusII
2、实验设备:GW48-ES EDA实验开发系统、联想电脑 3、拟用芯片:EPF10K20TC144-4或EP1K30TC144-3
四、实验设计
半加器(h_adder.gdf)
全加器(f_adder.gdf)
实验结果
半加器仿真波形
半加器引脚锁定
实验芯片:EPF10K20TC144-4 选用模式:模式5 设计实体I/O标识 a b so co I/O来源/去向 键1 键2 二极管D1 二极管D2 结构图上的信号名 PIO0 PIO1 PIO8 PIO9 芯片引脚号 8 9 20 21
全加器仿真波形
全加器引脚锁定
实验芯片:EPF10K20TC144-4 选用模式:模式5 设计实体I/O标识 ain bin cin sum cout I/O来源/去向 键1 键2 键3 二极管D1 二极管D2 结构图上的信号名 PIO0 PIO1 PIO2 PIO8 PIO9 芯片引脚号 8 9 10 20 21 全加器真值表 ain 0 bin cin sum cout 1 0 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 1 1 1 1 0 0 0 0
实验二 1位全加器VHDL文本输入设计
一、实验目的
1、熟悉MAX+plusII软件的基本使用方法。
2、熟悉GW48-ES EDA实验开发系统的基本使用方法。 3、了解VHDL文本输入设计方法。
二、实验内容
设计并调试好一个1位二进制全加器,并用GW48-ES EDA实验开发系统(拟采用的实验芯片的型号为EPF10K20TC144-4或EP1K30TC144-3)进行系统仿真、硬件验证。设计1位二进制全加器时要求先设计一个或门和一个1位二进制半加器,再由或门和1位二进制半加器构成1位二进制全加器。
三、实验条件
1、开发条件:MAX+plusII
2、实验设备:GW48-ES EDA实验开发系统、联想电脑 3、拟用芯片:EPF10K20TC144-4或EP1K30TC144-3
四、实验设计
--或门逻辑描述(or2a.vhd) LIBRARY IEEE ;
USE IEEE.STD_LOGIC_11.ALL; ENTITY or2a IS
PORT (a, b :IN STD_LOGIC;
c : OUT STD_LOGIC ); END ENTITY or2a;
ARCHITECTURE one OF or2a IS BEGIN
c <= a OR b ; END ARCHITECTURE one;
--半加器描述(h_adder.vhd)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY h_adder IS
PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder;
ARCHITECTURE fh1 OF h_adder is BEGIN
so <= NOT(a XOR (NOT b)) ; co <= a AND b ;
END ARCHITECTURE fh1;
--1位二进制全加器顶层设计描述(f_adder.vhd)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY f_adder IS
PORT (ain, bin, cin : IN STD_LOGIC; Cout, sum : OUT STD_LOGIC ); END ENTITY f_adder;
ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder
PORT ( a, b : IN STD_LOGIC; Co, so : OUT STD_LOGIC); END COMPONENT ; COMPONENT or2a
PORT (a, b : IN STD_LOGIC; c : OUT STD_LOGIC); END COMPONENT;
SIGNAL d, e, f : STD_LOGIC; BEGIN
u1 : h_adder PORT MAP(a=>ain, b=>bin, co=>d, so=>e);
u2 : h_adder PORT MAP(a=>e, b=>cin, co=>f, so=>sum);
u3 : or2a PORT MAP(a=>d, b=>f, c=>cout); END ARCHITECTURE fd1 ;
或门仿真波形
半加器仿真波形
全加器仿真波形
全加器引脚锁定
实验芯片:EPF10K20TC144-4 选用模式:模式5 设计实体I/O标识 ain bin cin sum cout I/O来源/去向 键1 键2 键3 二极管D1 二极管D2 结构图上的信号名 PIO0 PIO1 PIO2 PIO8 PIO9 芯片引脚号 8 9 10 20 21 全加器真值表 ain 0 bin cin sum cout 1 0 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 1 1 1 1 0 0 0 0
实验三 有时钟使能的两位十进制计数器VHDL文本输入设计
一、实验目的
1、熟悉MAX+plusII软件的基本使用方法。
2、熟悉GW48-ES EDA实验开发系统的基本使用方法。
3、学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
二、实验内容
设计并调试好一个有时钟使能的两位十进制计数器,并用GW48-ES EDA实验开发系统(拟采用的实验芯片的型号为EPF10K20TC144-4或EP1K30TC144-3)进行系统仿真、硬件验证。设计有时钟使能的两位十进制计数器时要求先设计一个或门和一个十进制计数器,再由十进制计数器构成两位十进制计数器。
三、实验条件
1、开发条件:MAX+plusII
2、实验设备:GW48-ES EDA实验开发系统、联想电脑 3、拟用芯片:EPF10K20TC144-4或EP1K30TC144-3
四、实验设计
--十进制计数器(cnt10.vhd) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt10 IS
PORT (clk : IN STD_LOGIC; clr : IN STD_LOGIC; enb : IN STD_LOGIC; outy : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout : OUT STD_LOGIC); END cnt10;
ARCHITECTURE behav OF cnt10 IS BEGIN
PROCESS(clk, clr, enb)
VARIABLE cqi : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF clr = '1' THEN cqi := \"0000\"; ELSIF CLK'EVENT AND CLK = '1' THEN IF enb = '1' THEN
IF cqi<\"1001\" THEN cqi := cqi + 1; ELSE cqi := \"0000\"; END IF; END IF; END IF;
outy <= cqi ;
cout<=cqi(0) AND (NOT cqi(1)) AND (NOT cqi(2)) AND cqi(3); END PROCESS; END behav;
--两位十进制计数器(cnt100.vhd) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt100 IS
PORT (clkin : IN STD_LOGIC; clrin : IN STD_LOGIC; enbin : IN STD_LOGIC; outlow : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); outhigh : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); coutout : OUT STD_LOGIC); END ENTITY cnt100;
ARCHITECTURE one OF cnt100 IS COMPONENT cnt10
PORT (clk : IN STD_LOGIC; clr : IN STD_LOGIC; enb : IN STD_LOGIC; outy : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout : OUT STD_LOGIC); END COMPONENT; SIGNAL a : STD_LOGIC;
BEGIN u1 : cnt10 PORT MAP(clk=>clkin, clr=>clrin, enb=>enbin, outy=>outlow, cout=>a); u2 : cnt10 PORT MAP(clk=>a, clr=>clrin, enb=>enbin, outy=>outhigh, cout=>coutout);
END ARCHITECTURE one;
十进制计数器仿真波形
两位十进制计数器仿真波形
两位十进制计数器管脚锁定 实验模式:NO:5 设计实体I/O标识 I/O来源/去向 信号名 芯片管脚序号
enbin clrin clkin coutout outlow[3..0] outhigh[3..0]
键1 键2 CLOCK0 二极管D1 数码管1 数码管2 PIO0 PIO1 CLOCK0 PIO8 PIO16~PIO19 PIO20~PIO23 8 9 54 20 30~33 36~39
实验五 4位十进制频率计VHDL文本输入设计
一、实验目的
1、熟悉MAX+plusII软件的基本使用方法。
2、熟悉GW48-ES EDA实验开发系统的基本使用方法。
3、学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
二、实验内容
设计并调试好一个有时钟使能的两位十进制计数器,并用GW48-ES EDA实验开发系统(拟采用的实验芯片的型号为EPF10K20TC144-4或EP1K30TC144-3)进行系统仿真、硬件验证。设计有时钟使能的两位十进制计数器时要求先设计一个或门和一个十进制计数器,再由十进制计数器构成两位十进制计数器。
三、实验条件
1、开发条件:MAX+plusII
2、实验设备:GW48-ES EDA实验开发系统、联想电脑 3、拟用芯片:EPF10K20TC144-4或EP1K30TC144-3
四、实验设计
--测频控制器(testctl.vhd) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY TESTCTL IS
PORT ( CLKK : IN STD_LOGIC; -- 1Hz CNT_EN,RST_CNT,LOAD : OUT STD_LOGIC); END TESTCTL;
ARCHITECTURE behav OF TESTCTL IS SIGNAL DIV2CLK : STD_LOGIC; BEGIN
PROCESS( CLKK ) BEGIN
IF CLKK'EVENT AND CLKK = '1' THEN DIV2CLK <= NOT DIV2CLK; END IF;
END PROCESS;
PROCESS (CLKK, DIV2CLK) BEGIN
IF CLKK='0' AND Div2CLK='0' THEN RST_CNT <= '1'; ELSE RST_CNT <= '0'; END IF; END PROCESS;
LOAD <= NOT DIV2CLK ; CNT_EN <= DIV2CLK; END behav;
--十进制计数器(cnt10.vhd) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt10 IS
PORT (clk : IN STD_LOGIC; clr : IN STD_LOGIC; enb : IN STD_LOGIC; outy : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout : OUT STD_LOGIC); END cnt10;
ARCHITECTURE behav OF cnt10 IS BEGIN
PROCESS(clk, clr, enb)
VARIABLE cqi : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF clr = '1' THEN cqi := \"0000\"; ELSIF CLK'EVENT AND CLK = '1' THEN IF enb = '1' THEN
IF cqi<\"1001\" THEN cqi := cqi + 1; ELSE cqi := \"0000\"; END IF; END IF;
END IF;
outy <= cqi ;
cout<=cqi(0) AND (NOT cqi(1)) AND (NOT cqi(2)) AND cqi(3); END PROCESS; END behav;
--4位锁存器(reg4b.vhd) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY REG4B IS
PORT ( LOAD : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END REG4B;
ARCHITECTURE behav OF REG4B IS BEGIN
PROCESS(LOAD, DIN) BEGIN
IF LOAD'EVENT AND LOAD = '1' THEN DOUT <= DIN; --时钟到来,锁存数据 END IF; END PROCESS; END behav;
--4位十进制频率计(quen4b) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY quen4b IS
PORT (clkin : IN STD_LOGIC; fin : IN STD_LOGIC;
out1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); out3 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); out4 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); coutt : OUT STD_LOGIC); END ENTITY quen4b;
ARCHITECTURE one OF quen4b IS COMPONENT TESTCTL
PORT ( CLKK : IN STD_LOGIC;
CNT_EN,RST_CNT,LOAD : OUT STD_LOGIC); END COMPONENT; COMPONENT cnt10
PORT (clk : IN STD_LOGIC; clr : IN STD_LOGIC; enb : IN STD_LOGIC; outy : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout : OUT STD_LOGIC); END COMPONENT; COMPONENT REG4B
PORT ( LOAD : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END COMPONENT;
SIGNAL a_ena, b_rst,c_load,cout1,cout2,cout3 : STD_LOGIC;
SIGNAL outy1,outy2,outy3,outy4 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN u1 : TESTCTL PORT MAP(clkk=>clkin, CNT_EN=>a_ena, RST_CNT=>b_rst, LOAD=>c_load); u2 : cnt10 PORT MAP(clk=>fin, clr=>b_rst, enb=>a_ena, outy=>outy1, cout=>cout1);
u3 : cnt10 PORT MAP(clk=>cout1, clr=>b_rst, enb=>a_ena, outy=>outy2, cout=>cout2);
u4 : cnt10 PORT MAP(clk=>cout2, clr=>b_rst, enb=>a_ena, outy=>outy3, cout=>cout3);
u5 : cnt10 PORT MAP(clk=>cout3, clr=>b_rst, enb=>a_ena, outy=>outy4, cout=>coutt);
u6 : REG4B PORT MAP(LOAD=>c_load, DIN=>outy1, DOUT=>out1); u7 : REG4B PORT MAP(LOAD=>c_load, DIN=>outy2, DOUT=>out2); u8 : REG4B PORT MAP(LOAD=>c_load, DIN=>outy3, DOUT=>out3); u9 : REG4B PORT MAP(LOAD=>c_load, DIN=>outy4, DOUT=>out4); END ARCHITECTURE one;
四位十进制频率计仿真波形(clkin:1s,fin:300us)
四位十进制频率管脚锁定 实验模式:NO:5
设计实体I/O标识 I/O来源/去向 信号名 芯片管脚序号 clkin fin out1 out2 out3 out4 coutt
Clock1 Clock0 数码管1 数码管2 数码管3 数码管4 二极管D1 Clock1 Clock0 PIO16~PIO19 PIO20~PIO23 PIO24~PIO27 PIO28~PIO31 PIO8 55 54 30~33 36~39 41、42、65、67 68、69、70、72 20
实验七 数字秒表VHDL文本输入设计。
实验目的
1、熟悉MAX+plusII的使用。
2、学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。 3、熟悉GW48EDA实验开发系统使用。
实验仪器
联想电脑,GW48EDA实验开发系统
设计任务
1、设计一个计时范围为0.01秒~1小时的数字秒表,应具有停表、恢复、清零功能。
实验要求
1、 画出系统的原理框图,说明系统中各主要组成部分的功能。 2、 编写各个VHDL源程序。 3、 根据选用的软件编好用于系统仿真的测试文件。 4、 根据选用的软件及EDA实验开发装置编好用于硬件验证的管脚锁定文件。 5、 记录系统仿真、硬件验证结果。
6、 记录实验过程中出现的问题及解决办法。
实验内容
--3MHz→100Hz分频器(CLKGEN.VHD) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY CLKGEN IS
PORT(CLK: IN STD_LOGIC; NEWCLK: OUT STD_LOGIC); END ENTITY CLKGEN;
ARCHITECTURE ART OF CLKGEN IS
SIGNAL CNTER:INTEGER RANGE 0 TO 10#59999#; BEGIN
PROCESS(CLK)IS BEGIN
IF CLK'EVENT AND CLK='1'THEN
IF CNTER=10#29999# THEN CNTER<=0; ELSE CNTER<=CNTER+1; END IF; END IF; END PROCESS; PROCESS(CNTER)IS BEGIN
IF CNTER=10#29999# THEN NEWCLK<='1'; ELSE NEWCLK<='0'; END IF; END PROCESS;
END ARCHITECTURE ART;
--六进制计数器(CNT6.VHD) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT6 IS
PORT(CLK:IN STD_LOGIC; CLR:IN STD_LOGIC; ENA:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC); END ENTITY CNT6;
ARCHITECTURE ART OF CNT6 IS
SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
PROCESS(CLK,CLR,ENA)IS BEGIN
IF CLR='1'THEN CQI<=\"0000\"; ELSIF CLK'EVENT AND CLK='1'THEN IF ENA='1'THEN
IF CQI=\"0101\"THEN CQI<=\"0000\";
ELSE CQI<=CQI+'1'; END IF; END IF; END IF; END PROCESS; PROCESS(CQI)IS BEGIN
IF CQI=\"0000\"THEN CARRY_OUT<='1'; ELSE CARRY_OUT<='0'; END IF; END PROCESS; CQ<=CQI;
END ARCHITECTURE ART;
--十进制计数器(CNT10.VHD) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS
PORT(CLK:IN STD_LOGIC; CLR:IN STD_LOGIC; ENB:IN STD_LOGIC;
OUTY:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT:OUT STD_LOGIC);
END ENTITY CNT10;
ARCHITECTURE ART OF CNT10 IS
SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
PROCESS(CLK,CLR,ENB)IS BEGIN
IF CLR='1'THEN CQI<=\"0000\"; ELSIF CLK'EVENT AND CLK='1'THEN IF ENB='1'THEN
IF CQI=\"1001\"THEN CQI<=\"0000\"; ELSE CQI<=CQI+'1'; END IF; END IF; END IF; END PROCESS; PROCESS(CQI)IS BEGIN
IF CQI=\"0000\"THEN COUT<='1'; ELSE COUT<='0'; END IF; END PROCESS; OUTY<=CQI;
END ARCHITECTURE ART;
--数字秒表(TIMES.VHD) LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY TIMES IS
PORT(CLR:IN STD_LOGIC; CLK:IN STD_LOGIC; ENA:IN STD_LOGIC;
DOUT:OUT STD_LOGIC_VECTOR(23 DOWNTO 0)); END ENTITY TIMES;
ARCHITECTURE ART OF TIMES IS COMPONENT CLKGEN IS
PORT(CLK:IN STD_LOGIC; NEWCLK:OUT STD_LOGIC); END COMPONENT CLKGEN; COMPONENT CNT10 IS
PORT(CLK,CLR,ENB:IN STD_LOGIC;
OUTY:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC); END COMPONENT CNT10; COMPONENT CNT6 IS
PORT(CLK,CLR,ENA:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT:OUT STD_LOGIC); END COMPONENT CNT6; SIGNAL S0:STD_LOGIC;
SIGNAL S1,S2,S3,S4,S5:STD_LOGIC; BEGIN
U0:CLKGEN PORT MAP(CLK=>CLK,NEWCLK=>S0);
U1:CNT10 PORT MAP(S0,CLR,ENA,DOUT(3 DOWNTO 0),S1); U2:CNT10 PORT MAP(S1,CLR,ENA,DOUT(7 DOWNTO 4),S2); U3:CNT10 PORT MAP(S2,CLR,ENA,DOUT(11 DOWNTO 8),S3); U4:CNT6 PORT MAP(S3,CLR,ENA,DOUT(15 DOWNTO 12),S4); U5:CNT10 PORT MAP(S4,CLR,ENA,DOUT(19 DOWNTO 16),S5); U6:CNT6 PORT MAP(S5,CLR,ENA,DOUT(23 DOWNTO 20)); END ARCHITECTURE ART;
数字秒表管脚锁定 实验模式:NO:5
设计实体I/O标识 I/O来源/去向 信号名 芯片管脚序号 clr ena clk Dout(0)-dout(3) Dout(4)-dout(7) Dout(8)-dout(11) Dout(12)-dout(15) Dout(16)-dout(19) Dout(20)-dout(23)
键1 键2 Clock0 数码管1 数码管2 数码管3 数码管4 数码管5 数码管6 PIO0 PIO1 Clock0 PIO16~PIO19 PIO20~PIO23 PIO24~PIO27 PIO28~PIO31 PIO32~PIO35 PIO36~PIO39 8 9 54 30~33 36~39 41、42、65、67 68、69、70、72 73、78、79、80 81、82、83、86 实验八 交通灯信号控制器VHDL文本输入设计。
实验目的
1、熟悉MAX+plusII的使用。
2、学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。 3、熟悉GW48EDA实验开发系统使用。
设计任务
设计一个由一条主干道和一条支干道的汇合点形成的十字交叉路口的交通灯控制器,具体要求如下:
1、 支干道各设有一个绿、红、黄指示灯,两个显示数码管。 2、 干道处于常允许通行状态,而支干道有车来才允许通行。当主干道允许通行
亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯。 3、 主、支干道均有车时,两者交替道允许通,主干道每次放行45S,支干道每
次放行25S,在每次由亮绿灯变成亮红灯的转换过程中,要亮5S的黄灯作为过渡,并进行减计时显示。
实验要求
1、出系统的原理框图,说明系统中各主要组成部分的功能。 2、写各个VHDL源程序。
3、根据选用的软件编好用于系统仿真的测试文件。
4、根据选用的软件及EDA实验开发装置编好用于硬件验证的管脚锁定文件。 5、记录系统仿真、硬件验证结果。
6、记录实验过程中出现的问题及解决办法。
实验内容
--Cnt05s.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT05S IS
PORT(CLK,EN05M,EN05B:IN STD_LOGIC;
DOUT5:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY CNT05S;
ARCHITECTURE ART OF CNT05S IS
SIGNAL CNT3B:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN
PROCESS(CLK,EN05M,EN05B) IS BEGIN
IF(CLK'EVENT AND CLK='1') THEN
IF EN05M='1' THEN CNT3B<=CNT3B+1; ELSIF EN05B='1' THEN CNT3B<=CNT3B+1;
ELSIF EN05B='0' THEN CNT3B<=CNT3B-CNT3B-1; END IF; END IF; END PROCESS;
PROCESS(CNT3B) IS BEGIN
CASE CNT3B IS
WHEN\"000\"=>DOUT5<=\"00000101\"; WHEN\"001\"=>DOUT5<=\"00000100\"; WHEN\"010\"=>DOUT5<=\"00000011\"; WHEN\"011\"=>DOUT5<=\"00000010\";
WHEN\" mkm,,,,,,100\"=>DOUT5<=\"00000001\"; WHEN OTHERS=>DOUT5<=\"00000000\"; END CASE; END PROCESS;
END ARCHITECTURE ART;
--Cnt25s.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT25S IS
PORT(SB,SM,CLK,EN25:IN STD_LOGIC;
DOUT25M,DOUT25B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY CNT25S;
ARCHITECTURE ART OF CNT25S IS
SIGNAL CNT5B:STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN
PROCESS(SB,SM,CLK,EN25) IS BEGIN
IF (SB='0'OR SM='0')THEN CNT5B<=CNT5B-CNT5B-1; ELSIF(CLK'EVENT AND CLK='1') THEN IF EN25='1' THEN CNT5B<=CNT5B+1;
ELSIF EN25='0' THEN CNT5B<=CNT5B-CNT5B-1; END IF; END IF; END PROCESS;
PROCESS(CNT5B) IS BEGIN
CASE CNT5B IS
WHEN\"00000\"=>DOUT25M<=\"00100101\";DOUT25B<=\"00110000\"; WHEN\"00001\"=>DOUT25M<=\"00100100\";DOUT25B<=\"00101001\"; WHEN\"00010\"=>DOUT25M<=\"00100011\";DOUT25B<=\"00101000\"; WHEN\"00011\"=>DOUT25M<=\"00100010\";DOUT25B<=\"00100111\"; WHEN\"00100\"=>DOUT25M<=\"00100001\";DOUT25B<=\"00100110\"; WHEN\"00101\"=>DOUT25M<=\"00100000\";DOUT25B<=\"00100101\"; WHEN\"00110\"=>DOUT25M<=\"00011001\";DOUT25B<=\"00100100\"; WHEN\"00111\"=>DOUT25M<=\"00011000\";DOUT25B<=\"00100011\"; WHEN\"01000\"=>DOUT25M<=\"00010111\";DOUT25B<=\"00100010\"; WHEN\"01001\"=>DOUT25M<=\"00010110\";DOUT25B<=\"00100001\"; WHEN\"01010\"=>DOUT25M<=\"00010101\";DOUT25B<=\"00100000\"; WHEN\"01011\"=>DOUT25M<=\"00010100\";DOUT25B<=\"00011001\"; WHEN\"01100\"=>DOUT25M<=\"00010011\";DOUT25B<=\"00011000\"; WHEN\"01101\"=>DOUT25M<=\"00010010\";DOUT25B<=\"00010111\"; WHEN\"01110\"=>DOUT25M<=\"00010001\";DOUT25B<=\"00010110\"; WHEN\"01111\"=>DOUT25M<=\"00010000\";DOUT25B<=\"00010101\"; WHEN\"10000\"=>DOUT25M<=\"00001001\";DOUT25B<=\"00010100\"; WHEN\"10001\"=>DOUT25M<=\"00001000\";DOUT25B<=\"00010011\"; WHEN\"10010\"=>DOUT25M<=\"00000111\";DOUT25B<=\"00010010\"; WHEN\"10011\"=>DOUT25M<=\"00000110\";DOUT25B<=\"00010001\"; WHEN\"10100\"=>DOUT25M<=\"00000101\";DOUT25B<=\"00010000\"; WHEN\"10101\"=>DOUT25M<=\"00000100\";DOUT25B<=\"00001001\"; WHEN\"10110\"=>DOUT25M<=\"00000011\";DOUT25B<=\"00001000\"; WHEN\"10111\"=>DOUT25M<=\"00000010\";DOUT25B<=\"00000111\"; WHEN\"11000\"=>DOUT25M<=\"00000001\";DOUT25B<=\"00000110\";
WHEN OTHERS=>DOUT25M<=\"00000000\";DOUT25B<=\"00000000\"; END CASE; END PROCESS;
END ARCHITECTURE ART;
--Cnt45s.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT45S IS
PORT(SB,CLK,EN45:IN STD_LOGIC;
DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY CNT45S;
ARCHITECTURE ART OF CNT45S IS
SIGNAL CNT6B:STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN
PROCESS(SB,CLK,EN45) IS BEGIN
IF SB='0' THEN CNT6B<=CNT6B-CNT6B-1; ELSIF(CLK'EVENT AND CLK='1') THEN IF EN45='1' THEN CNT6B<=CNT6B+1;
ELSIF EN45='0' THEN CNT6B<=CNT6B-CNT6B-1; END IF; END IF; END PROCESS;
PROCESS(CNT6B) IS BEGIN
CASE CNT6B IS
WHEN\"000000\"=>DOUT45M<=\"01000101\";DOUT45B<=\"01010000\"; WHEN\"000001\"=>DOUT45M<=\"01000100\";DOUT45B<=\"01001001\"; WHEN\"000010\"=>DOUT45M<=\"01000011\";DOUT45B<=\"01001000\"; WHEN\"000011\"=>DOUT45M<=\"01000010\";DOUT45B<=\"01000111\"; WHEN\"000100\"=>DOUT45M<=\"01000001\";DOUT45B<=\"01000110\"; WHEN\"000101\"=>DOUT45M<=\"01000000\";DOUT45B<=\"01000101\"; WHEN\"000110\"=>DOUT45M<=\"00111001\";DOUT45B<=\"01000100\"; WHEN\"000111\"=>DOUT45M<=\"00111000\";DOUT45B<=\"01000011\"; WHEN\"001000\"=>DOUT45M<=\"00110111\";DOUT45B<=\"01000010\"; WHEN\"001001\"=>DOUT45M<=\"00110110\";DOUT45B<=\"01000001\"; WHEN\"001010\"=>DOUT45M<=\"00110101\";DOUT45B<=\"01000000\"; WHEN\"001011\"=>DOUT45M<=\"00110100\";DOUT45B<=\"00111001\"; WHEN\"001100\"=>DOUT45M<=\"00110011\";DOUT45B<=\"00111000\"; WHEN\"001101\"=>DOUT45M<=\"00110010\";DOUT45B<=\"00110111\"; WHEN\"001110\"=>DOUT45M<=\"00110001\";DOUT45B<=\"00110110\"; WHEN\"001111\"=>DOUT45M<=\"00110000\";DOUT45B<=\"00110101\"; WHEN\"010000\"=>DOUT45M<=\"00101001\";DOUT45B<=\"00110100\"; WHEN\"010001\"=>DOUT45M<=\"00101000\";DOUT45B<=\"00110011\"; WHEN\"010010\"=>DOUT45M<=\"00100111\";DOUT45B<=\"00110010\"; WHEN\"010011\"=>DOUT45M<=\"00100110\";DOUT45B<=\"00110001\"; WHEN\"010100\"=>DOUT45M<=\"00100101\";DOUT45B<=\"00110000\"; WHEN\"010101\"=>DOUT45M<=\"00100100\";DOUT45B<=\"00101001\"; WHEN\"010110\"=>DOUT45M<=\"00100011\";DOUT45B<=\"00101000\"; WHEN\"010111\"=>DOUT45M<=\"00100010\";DOUT45B<=\"00100111\"; WHEN\"011000\"=>DOUT45M<=\"00100001\";DOUT45B<=\"00100110\"; WHEN\"011001\"=>DOUT45M<=\"00100000\";DOUT45B<=\"00100101\"; WHEN\"011010\"=>DOUT45M<=\"00011001\";DOUT45B<=\"00100100\"; WHEN\"011011\"=>DOUT45M<=\"00011000\";DOUT45B<=\"00100011\"; WHEN\"011100\"=>DOUT45M<=\"00010111\";DOUT45B<=\"00100010\"; WHEN\"011101\"=>DOUT45M<=\"00010110\";DOUT45B<=\"00100001\";
WHEN\"011110\"=>DOUT45M<=\"00010101\";DOUT45B<=\"00100000\"; WHEN\"011111\"=>DOUT45M<=\"00010100\";DOUT45B<=\"00011001\"; WHEN\"100000\"=>DOUT45M<=\"00010011\";DOUT45B<=\"00011000\"; WHEN\"100001\"=>DOUT45M<=\"00010010\";DOUT45B<=\"00010111\"; WHEN\"100010\"=>DOUT45M<=\"00010001\";DOUT45B<=\"00010110\"; WHEN\"100011\"=>DOUT45M<=\"00010000\";DOUT45B<=\"00010101\"; WHEN\"100100\"=>DOUT45M<=\"00001001\";DOUT45B<=\"00010100\"; WHEN\"100101\"=>DOUT45M<=\"00001000\";DOUT45B<=\"00010011\"; WHEN\"100110\"=>DOUT45M<=\"00000111\";DOUT45B<=\"00010010\"; WHEN\"100111\"=>DOUT45M<=\"00000110\";DOUT45B<=\"00010001\"; WHEN\"101000\"=>DOUT45M<=\"00000101\";DOUT45B<=\"00010000\"; WHEN\"101001\"=>DOUT45M<=\"00000100\";DOUT45B<=\"00001001\"; WHEN\"101010\"=>DOUT45M<=\"00000011\";DOUT45B<=\"00001000\"; WHEN\"101011\"=>DOUT45M<=\"00000010\";DOUT45B<=\"00000111\"; WHEN\"101100\"=>DOUT45M<=\"00000001\";DOUT45B<=\"00000110\"; WHEN OTHERS=>DOUT45M<=\"00000000\";DOUT45B<=\"00000000\"; END CASE; END PROCESS;
END ARCHITECTURE ART;
--Cskz.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CSKZ IS
PORT(INA:IN STD_LOGIC; OUTA:OUT STD_LOGIC); END ENTITY CSKZ;
ARCHITECTURE ART OF CSKZ IS BEGIN
PROCESS IS BEGIN
IF INA='1'THEN OUTA<='1'; ELSE OUTA<='0'; END IF; END PROCESS;
END ARCHITECTURE ART;
--Jtdkz.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY JTDKZ IS
PORT(CLK,SM,SB:IN STD_LOGIC;
MR,MY0,MG0,BR,BY0,BG0:OUT STD_LOGIC); END ENTITY JTDKZ;
ARCHITECTURE ART OF JTDKZ IS TYPE STATE_TYPE IS(A,B,C,D); SIGNAL STATE:STATE_TYPE; BEGIN
CNT:PROCESS(CLK) IS
VARIABLE S:INTEGER RANGE 0 TO 45; VARIABLE CLR,EN:BIT; BEGIN
IF(CLK'EVENT AND CLK='1') THEN IF CLR='0' THEN S:=0; ELSIF EN='0' THEN S:=S; ELSE S:=S+1; END IF;
CASE STATE IS WHEN
A=>MR<='0';MY0<='0';MG0<='1';BR<='1';BY0<='0';BG0<='0'; IF(SB AND SM)='1' THEN
IF S=45 THEN STATE<=B;CLR:='0';EN:='0'; ELSE STATE<=A;CLR:='1';EN:='1'; END IF;
ELSIF(SB AND (NOT SM))='1' THEN STATE<=B;CLR:='0';EN:='0'; ELSE STATE<=A;CLR:='1';EN:='1'; END IF; WHEN
B=>MR<='0';MY0<='1';MG0<='0';BR<='1';BY0<='0';BG0<='0'; IF S=5 THEN STATE<=C;CLR:='0';EN:='0'; ELSE STATE<=B;CLR:='1';EN:='1'; END IF; WHEN
C=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='0';BG0<='1'; IF(SB AND SM)='1' THEN
IF S=25 THEN STATE<=D;CLR:='0';EN:='0'; ELSE STATE<=C;CLR:='1';EN:='1'; END IF;
ELSIF SB='0' THEN STATE<=A;CLR:='0';EN:='0'; ELSE STATE<=C;CLR:='1';EN:='1'; END IF; WHEN
D=>MR<='1';MY0<='0';MG0<='0';BR<='0';BY0<='1';BG0<='0'; IF S=5 THEN STATE<=A;CLR:='0';EN:='0'; ELSE STATE<=D;CLR:='1';EN:='1'; END IF; END CASE; END IF;
END PROCESS CNT; END ARCHITECTURE ART;
--Xskz.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY XSKZ IS
PORT(EN45,EN25,EN05M,EN05B:IN STD_LOGIC; AIN45M,AIN45B,AIN25M,AIN25B,AIN05:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
DOUTM,DOUTB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY XSKZ;
ARCHITECTURE ART OF XSKZ IS BEGIN
PROCESS(EN45,EN25,EN05M,EN05B,AIN45M,AIN45B,AIN25M,AIN25B,AIN05) IS
BEGIN
IF EN45='1' THEN DOUTM<=AIN45M(7 DOWNTO 0);DOUTB<=AIN45B(7 DOWNTO 0);
ELSIF EN05M='1' THEN DOUTM<=AIN05(7 DOWNTO 0);DOUTB<=AIN05(7 DOWNTO 0); ELSIF EN25='1' THEN DOUTM<=AIN25M(7 DOWNTO 0);DOUTB<=AIN25B(7 DOWNTO 0);
ELSIF EN05B='1' THEN DOUTM<=AIN05(7 DOWNTO 0);DOUTB<=AIN05(7 DOWNTO 0);
END IF;
END PROCESS;
END ARCHITECTURE ART;.
--Jtkzq.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JTKZQ IS
PORT(CLK,SM,SB:IN STD_LOGIC;
MR,MG,MY,BY,BR,BG:OUT STD_LOGIC;
DOUT1,DOUT2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY JTKZQ;
ARCHITECTURE ART OF JTKZQ IS COMPONENT JTDKZ IS
PORT(CLK,SM,SB:IN STD_LOGIC;
MR,MY0,MG0,BR,BY0,BG0:OUT STD_LOGIC); END COMPONENT JTDKZ; COMPONENT CSKZ IS
PORT(INA:IN STD_LOGIC; OUTA:OUT STD_LOGIC); END COMPONENT CSKZ; COMPONENT CNT45S IS
PORT(SB,CLK,EN45:IN STD_LOGIC;
DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT CNT45S; COMPONENT CNT05S IS
PORT(CLK,EN05M,EN05B:IN STD_LOGIC;
DOUT5:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT CNT05S; COMPONENT CNT25S IS
PORT(SB,SM,CLK,EN25:IN STD_LOGIC;
DOUT25M,DOUT25B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT CNT25S; COMPONENT XSKZ IS
PORT(EN45,EN25,EN05M,EN05B:IN STD_LOGIC;
AIN45M,AIN45B,AIN25M,AIN25B,AIN05:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
DOUTM,DOUTB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT XSKZ;
SIGNAL EN1,EN2,EN3,EN4:STD_LOGIC;
SIGNAL S45M,S45B,S05,S25M,S25B:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN U1:JTDKZ PORT MAP(CLK=>CLK,SM=>SM,SB=>SB,MR=>MR,MY0=>EN2,MG0=>EN1,BR=>BR,BY0=>EN4,BG0=>EN3);
U2:CSKZ PORT MAP(INA=>EN1,OUTA=>MG); U3:CSKZ PORT MAP(INA=>EN2,OUTA=>MY); U4:CSKZ PORT MAP(INA=>EN3,OUTA=>BG); U5:CSKZ PORT MAP(INA=>EN4,OUTA=>BY); U6:CNT45S PORT MAP(CLK=>CLK,SB=>SB,EN45=>EN1,DOUT45M=>S45M,DOUT45B=>S45B); U7:CNT05S PORT MAP(CLK=>CLK,EN05M=>EN2,DOUT5=>S05,EN05B=>EN4); U8:CNT25S PORT MAP(CLK=>CLK,SM=>SM,SB=>SB,EN25=>EN3,DOUT25M=>S25M,DOUT25B=>S25B);
U9:XSKZ PORT MAP(EN45=>EN1,EN05M=>EN2,EN25=>EN3,EN05B=>EN4,
AIN45M=>S45M,AIN45B=>S45B,AIN25M=>S25M,AIN25B=>S25B,AIN05=>S05,
DOUTM=>DOUT1,DOUTB=>DOUT2); END ARCHITECTURE ART;
交通灯控制器管脚锁定 实验模式:NO:5
设计实体I/O标识 I/O来源/去向 信号名 芯片管脚序号 sm sb clk Dout1(0)-dout1(3) Dout1(4)-dout1(7) Dout2(0)-dout2(3) Dout2(4)-dout2(7) Mr My0 Mg0 Br By0 Bg0
键1 键2 Clock0 数码管1 数码管2 数码管3 数码管4 发光二极管1 发光二极管2 发光二极管3 发光二极管4 发光二极管5 发光二极管6 PIO0 PIO1 Clock0 PIO16~PIO19 PIO20~PIO23 PIO24~PIO27 PIO28~PIO31 PIO8 PIO9 PIO10 PIO11 PIO12 PIO13 8 9 54 30~33 36~39 41、42、65、67 68、69、70、72 20 21 22 23 26 27
1位全加器原理图输入设计向导:
一、为本项设计建立文件夹
任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有文件的文件夹,此文件夹将被EDA软件默认为工作库(Work Library)。一般不同的设计项目最好放在不同的文件夹中,注意,一个设计项目可以包含多个设计文件。假设本项设计的文件夹取名为MY_PRJCT,在E盘中,路径为:E:\\MY_PRJCT。文件夹不能用中文。 二、输入设计项目和存盘
1、打开Mux+plusII,选菜单 FileNew,在弹出的File Type 窗中选原理图编辑输入项Graphic editor File,按OK后将打开原理图编辑窗。
2、在原理图编辑窗中的任何一个位置上点鼠标右键,将跳出一个选择窗,选择此窗中的输入元件项Enter Symbol,于是将跳出输入元件选择窗。
3、用鼠标双击文件库“Symbol Libraries”中的e:\\ maxplu2\\max2lib\\prim项,在Symbol Files窗中即可看到基本逻辑元件库prim中的所有元件,但也可以在Symbol Name窗中用键盘直接输入所需元件名,再按OK键,即可将元件调入原理图编辑窗中。如为了设计半加器,分别调入元件and2、not、xnor、input和output并连接好。然后用鼠标分别在input和output的PIN-NAME上双击使其变黑色,再用键盘分别输入各引脚名:a、b、co和so。
4、点击选项File “Save As”,选出刚才为自己的工程建立的目录E:\\MY_PRJCT,将已设计好的图文件取名为:h_adder.gdf (注意后缀是.gdf),并存在此目录内。
注意,原理图的文件名可以用设计者认为合适的任何英文名(VHDL文本存盘名有特殊要求),如adder.gdf等。还应注意,为了将文件存入自己的E:\\MY_PRJCT目录中,必须在Save as窗中双击MY_PRJCT目录,使其打开,然后键入文件名,并按OK。
三、将设计项目设置成工程文件(PROJECT)
为了使Max+plusII能对输入的设计项目按设计者的要求进行各项处理,必须将设计文件,如半加器h_adder.gdf,设置成Project。如果设计项目由多个设计文件组成,则应该将它们的主文件,即顶层文件设置成Project。如果要对其中某一底层文件进行单独编译、仿真和测试,也必须首先将其设置成Projcet。将设计项目(如h_adder.gdf)设定为工程文件设置成Project有两个途径:
1、选择File Project Set Project to Current File,即将当前设计文件设置成Project。选择此项后可以看到图窗口左上角显示出所设文件的路径。这点特别重要,此后的设计应该特别关注此路径的指向是否正确!
2、如果设计文件未打开,选 File Project Name ,然后在跳出的Project Name窗中找到E:\\MY_PRJCT目录,在其File小窗中双击adder.gdf文件,此时即选定此文件为本次设计的工程文件(即顶层文件)了。
四、选择目标器件并编译
为了获得与目标件对应的、精确的时序仿真文件,在对文件编译前必须选定最后实现本设计项目的目标器件,在Max+plusII环境中主要选Altera公司的FPGA或CPLD。
首先在Assign选项的下拉菜单中选择器件选择项Device,此窗口的Device Family是器件序列栏,应该首先在此拦中选定目标器件对应的序列名,如EPM7128S对应的是MAX7000S系列;EPF10K10对应的是FLEX10K系列等。为了选择EPF10K20TC144-4器件,应将此栏下方标有Show only Fastest Speed Grades的勾消去,以便显示出所有速度级别的器件。完成器件选择后,按OK键。
最后启动编译器,首先选择左上角的MAX+plusII选项,在其下拉菜单中选择编译器项Compiler,此编译器的功能包括网表文件提取、设计文件排错、逻辑综合、逻辑分配、适配(结构综合)、时序仿真文件提取和编程下载文件装配等。
点击Start,开始编译!如果发现有错,排除错误后再次编译。 五、时序仿真
接下来应该测试设计项目的正确性,即逻辑仿真,具体步骤如下:
1、建立波形文件。为此设计建立一个波形测试文件。选择File项及其New,再选New窗中的Waveform Editer..项,打开波形编辑窗。
2、输入信号节点。在波形编辑窗的上方选择Node项,在下拉菜单中选择输入信号节点项Nodes from SNF。在弹出的窗口中首先点击List键,这时左窗口将列出该项设计所有信号节点。由于设计者有时只需要观察其中部分信号的波形,因此要利用中间的“=>”键将需要观察的信号选到右栏中,然后点击OK键即可。
3、设置波形参量。波形编辑窗中已经调入了半加器的所有节点信号,在为编辑窗的半加器输入信号a和b设定必要的测试电平之前,首先设定相关的仿真参数。在Options选项中消去网格对齐Snap to Grid的选择(消去勾),以便能够任意设置输入电平位置,或设置输入时钟信号的周期。
4、设定仿真时间宽度。选择File项及其End time选项,在End time选择窗中选择适当的仿真时间域,如可选34us(34微秒),以便有足够长的观察时间。
5、加上输入信号。现在可以为输入信号a和b设定测试电平了。利用必要的功能键为a和b加上适当的电平,以便仿真后能测试so和co输出信号。
6、波形文件存盘。选择File项及其Save as选项,按OK键即可。由于存盘窗中的波形文件名是默认的(这里是h_adder.scf),所以直接存盘即可。
7、运行仿真器。选择MAX+plusII项及其中的仿真器Simulator选项,点击跳出的仿真器窗口中的Start键。注意,刚进入窗口时,应该将最下方的滑标拖向最左侧,以便可观察到初始波形。
8、观察分析波形。首先观察半加器的时序波形。还可以进一步了解信号的延时情况。 为了精确测量半加器输入与输出波形间的延时量,可打开时序分析器,方法是选择左上角的MAX+plusII项及其中的Timing Analyzer选项,点击跳出的分析器窗口中的Start键,延时信息即刻显示在图表中。其中左排的列表是输入信号,上排列出输出信号,中间是对应的延时量,这个延时量是精确针对EPF10K20TC144-4器件的。
9、包装元件入库。选择File项的“Open”选项,在“Open”窗中先点击原理图编辑文件项Graphic Editor Files,选择h_adder.gdf,重新打开半加器设计文件,然后选择File中的Create Default Symbol项,此时即将当前文件变成了一个包装好的单一元件,并被放置在工程路径指定的目录中
以备后用。
六、引脚锁定
如果以上的仿真测试正确无误,就应该将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,以便最终了解设计项目的正确性。这就必须根据评估板、开发电路系统或EDA实验板的要求对设计项目输入输出引脚赋予确定的引脚,以便能够对其进行实测。这里假设根据实际需要,要将半加器的4引脚a、b、co和so分别与目标器件EPF10K20的第8、9、21和20脚相接,操作如下:
1、选择Assign项及其中的引脚定位Pin\\Location\\Chip选项,在跳出的窗口中的Node Name栏中用键盘输入半加器的端口名,如a、b等。如果输入的端口名正确,在右侧的Pin Type栏将显示该信号的属性。
2、在左侧的Pin一栏中,用键盘输入该信号对应的引脚编号,如8、9、21等,然后按下面的Add键。分别将4个信号锁定在对应的引脚上,按OK键后结束。
3、特别需要注意的是,在锁定引脚后必须再通过MAX+plusII的Compiler选项,对文件从新进行编译一次,以便将引脚信息编入下载文件中。
七、编程下载
首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源:
1、下载方式设定。选择MAX+plusII项及其中的编程器Programmer选项,跳出编程器窗口,然后选择Options项的Hardware Setup硬件设置选项,在其下拉菜单中选ByteBlaster(MV)编程方式。此编程方式对应计算机的并行口下载通道,“MV”是混合电压的意思,主要指对ALTERA的各类芯核电压(如5V、3.3V、2.5V与1.8V等)的FPGA/CPLD都能由此下载。此项设置只在初次装软件后第一次编程前进行,设置确定后就不必重复此设置了。
2、下载。点击Configure键,向EPF10K20下载配置文件,如果连线无误,应出现报告配置完成的信息提示。
到此为止,完整的设计流程已经结束。VHDL文本输入的设计可参考这一流程。
八、设计顶层文件
可以将前面的工作看成是完成了一个底层元件的设计和功能检测,并被包装 入库。现在利用已设计好的半加器,完成顶层项目全加器的设计,详细步骤可参考以上设计流程:
1、打开一个新的原理图编辑窗,然后在元件输入窗的本工程目录中找到已包装好的半加器元件h_adder,并将它调入原理图编辑窗中。这时如果对编辑窗中的半加器元件h_adder双击,即刻弹出此元件内部的原理图。
2、完成全加器原理图设计,并以文件名f_adder.gdf存在同一目录中。 3、将当前文件设置成Project,并选择目标器件为EPF10K20TC144-4。 4、编译此顶层文件f_adder.gdf,然后建立波形仿真文件。
5、输入信号cin、bin和ain输入信号电平的设置,启动仿真器Simulator,观察输出波形的情况。
6、锁定引脚、编译并编程下载,硬件实测此全加器的逻辑功能。 九、设计流程归纳
下图是利用MAX+plusII进行设计的一般流程,因此对原理图输入设计和文
本方式的硬件描述语言设计输入都能适用。
图5-23 MAX+plusII一般设计流程
以上的“八”是一个多层次设计示例,其设计流程与上图所示的单一层次设计完全一样,此时低层次的设计项目只是高层项目(顶层设计)中的某个或某些元件,而当前的顶层设计项目也可成为更高层设计中的一个元件。
十、补充说明
为了使以上的各设计步骤表达得更为简洁和浅显易懂,一些需要详细说明的内容未能提及,故在此作为补充说明详述如下:
1、编译窗各功能项目块含义如下:
Compiler Netlist Extractor :编译器网表文件提取器,该功能块将输入的原理图文件或HDL文本文件转化成网表文件并检查其中可能的错误。该模块还负责连接顶层设计中的多层次设计文件;此外还包含一个内置的,用于接受外部标准网表文件的阅读器。
Database Builder :基本编译文件建立器,该功能块将含有任何层次的设计网表文件转化成一个单一层次的网表文件,以便进行逻辑综合。
Logic Synthesizer :逻辑综合器,对设计项目进行逻辑化简、逻辑优化和检查逻辑错误。综合后输出的网表文件表达了设计项目中底层逻辑元件最基本的连接方式和逻辑关系。逻辑综合器的工作方式和优化方案可以通过一些选项来实现。
Partitioner :逻辑分割器,如果选定的目标器件逻辑资源过小,而设计项目较大,该分割器则自动将设计项目进行分割,使得它们能够实现在多个选定的器件中。
Fitter :适配器,适配器也称结构综合器或布线布局器。它将逻辑综合所得的网表文件,即底层逻辑元件的基本连接关系,在选定的目标器件中具体实现。对于布线布局的策略和优化方式也可以通过设置一些选项来改变和实现。
Timing SNF Extractor :时序仿真网表文件提取器,该功能块从适配器输出的文件中提取时序仿真网表文件,留待对设计项目进行仿真测试用。对于大的设计项目一般先进行功能仿真,方法是在Compiler窗口下选择Processing项中的Functional SNF Extractor功能仿真网表文件提取器选项。
Assembler :装配器,该功能块将适配器输出的文件,根据不同的目标器件,不同的配置ROM产生多种格式的编程/配置文件,如用于CPLD或配置ROM用的POF编程文件(编程目标文件);用于对FPGA直接配置的SOF文件(SRAM目标文件);可用于单片机对FPGA配置的Hex文件,以及其它TTFs、Jam、JBC和JEDEC文件等。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务