EDA实验引脚锁定表
主板FPGA型号:EP2C35F484I8N
1 时钟连接
CLK1→M1
2 主板与“6位HEX译码输出”数码管显示板连接
数码管1 D1→A18 C1→A17 B1→A16 A1→A15
数码管2 D2→C14 C2→B20 B2→B19 A2→B18
数码管3 D3→D16 C3→E14 B3→E15 A3→F12
数码管4 D4→C17 C4→C18 B4→D14 A4→D15
数码管5 D5→AB8 C5→AB9 B5→AB10 A5→AB11
数码管6 D6→AB18 C6→AB19 B6→AB20 A6→AB7
CLK2→B12
表中DX、CX、BX、AX是数码管4位数据,对应连接的是FPGA引脚号。用10芯排线将主板的“JK1”、“JK2”等3个相邻的插座与“6位HEX译码输出”数码管显示板的对应3个插座连接起来。
3 主板与“发光管显示模块(底板上)”连接
插座 J6 JK4
D1 U3
D2 H3
D3 C7
D4 C13
引脚
D5 K20
D6 U20
D7 Y13
D8 Y7
表中D1—D8是8个发光2极管,对应连接的是FPGA引脚号。用10芯排线将主板的“JK4”与底板的“J6”连接起来。
4 主板与“高低电平输出控制开关(底板上)” 模块连接
插座 J7 JK5
L1 Y10
L2 Y16
L3 R20
L4 G20
引脚
L5 P3
L6 F4
L7 C10
L8 C16
表中L1—L8是8个单刀双掷开关,对应连接的是FPGA引脚号。用10芯排线将主板的“JK5”与底板的“J7”连接起来。
5 主板与“模数转换模块”连接
插座 J2 JK6 插座 J3 JK7
D7 A11
D6 B4
D5 B5
D4 B6
CLK A3
EOC A4
ENA(OE)A5
START A6
引脚
ALE A7
ADDC A8
ADDB A9
ADDA A10
表中前面是“模数转换模块”板“J2”插座信号,后面是主板“JK6” 插座信号,用10芯排线连接。
引脚
D3 B7
D2 B8
D1 B9
D0 B10
表中前面是“模数转换模块”板“J3”插座信号,后面是主板“JK7” 插座信号,用10芯排线连接。
恢复QuartusII操作环境(操作前先保存当前文件) 打开Tools—Customize 照下图操作。
可编程逻辑器件与VHDL实验说明
实验1: 组合电路设计(教材P124,5-1)
电路连接:将FPGA板“CLK1”连接到底板“频率选择”1Hz处将FPGA板“CLK2”连接到底板“频率选择”大于8Hz处将FPGA板的“JK5”插座与底板的“J7”插座相连接将FPGA板的“JK4” 插座与底板的“J6” 插座相连接引脚锁定:(信号—FPGA引脚号,看“EDA实验引脚锁定表”) a--M1;b--B12;s—C16(对应L8)y—Y7(对应D8);操作:拨动L8开关,观察发光二极管闪烁情况是否与输入信号频率对应。
参考电路: LIBRARY IEEE ;
USE IEEE.STD_LOGIC_11.ALL ; ENTITY mux21 IS
PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21;
ARCHITECTURE one OF mux21 IS BEGIN
PROCESS (a,b,s)
BEGIN
IF s = '0' THEN y <= a ; ELSE
y <= b ; END IF; END PROCESS;
END ARCHITECTURE one ;
实验2:设计含异步清零和同步时钟使能的加法计数器(教材P125,5-3)
电路连接:将FPGA板“CLK1”连接到底板“频率选择”1Hz处;将FPGA板的\"JK1\"、\"JK2\"等3个相邻的插座与\"6位HEX译码输出\"数码管显示板的对应3个插座相连接;将FPGA板的“JK5”插座与底板的“J7”插座相连接;将FPGA板的“JK4” 插座与底板的“J6” 插座相连接。引脚锁定:(信号—FPGA引脚号,看“EDA实验引脚锁定表”)CLK--M1;RST—C10(对应L7);EN—C16(对应L8);COUT-- Y7(对应D8)CQ3--A18,CQ2--A17,CQ1--A16,CQ0--A15;操作:拨动L7开关,复位;拨动L8开关,使能;观察计数及进位输出情况。
参考电路: LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10a IS
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10a;
ARCHITECTURE behav OF CNT10a IS BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF RST ='1'THEN CQI := (OTHERS =>'0') ; ELSIF CLK'EVENT AND CLK='1'THEN IF EN = '1' THEN
IF CQI < 9 THEN CQI := CQI + 1;
ELSE CQI := (OTHERS =>'0'); END IF; END IF; END IF;
IF CQI = 9 THEN COUT <= '1'; ELSE COUT <= '0'; END IF;
CQ <= CQI; END PROCESS; END behav;
实验3:用原理图输入法设计较复杂数字系统(P126 5-5)
电路连接:将FPGA板的CLK1连接到底板的“频率选择”8Hz处;将FPGA板的CLK2连接到底板的“频率选择”Hz处;将FPGA板的\"JK1\"、\"JK2\"等3个相邻的插座与\"6位HEX译码输出\"数码管显示板的对应3个插座连接起来;引脚锁定:clk8Hz--M1;fin--B12(输入频率,最大100Hz);H[3..0]锁在数码管2上(看“EDA实验引脚锁定表”);L[3..0]锁在数码管1上(看“EDA实验引脚锁定表”);
参考电路:
计数器
控制器
锁存器
顶层电路
实验4:8位10进制频率计(P191 7-2)(将原实验中的16进制改为了10进制计数)
接线:将FPGA板CLK1连接到底板“频率选择”1Hz处;将FPGA板CLK2连接到底板“频率选择”大于1Hz处;将FPGA板的\"JK1\"、\"JK2\"等3个相邻的插座与\"6位HEX译码输出\"数码管显示板的对应3个插座连接起来;引脚锁定:clk1Hz--M1;FIN--B12;DOUT从低到高每4位锁在1个数码管上,DOUT[31..24]不锁。操作:改变FIN信号频率,观察测出的结果。显示最大数据999999:仿真时将DOUT重新组合按4位分开。
参考电路
LIBRARY IEEE; --测频控制电路 USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FTCTRL IS
PORT (CLKK : IN STD_LOGIC; -- 1Hz
CNT_EN : OUT STD_LOGIC; -- 计数器时钟使能
RST_CNT : OUT STD_LOGIC; -- 计数器清零 Load : OUT STD_LOGIC ); -- 输出锁存信号 END FTCTRL;
ARCHITECTURE behav OF FTCTRL IS SIGNAL Div2CLK : STD_LOGIC; BEGIN
PROCESS( CLKK ) BEGIN
IF CLKK'EVENT AND CLKK = '1' THEN -- 1Hz时钟2分频 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;
LIBRARY IEEE; --32位计数器 USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTER32B IS
PORT (FIN : IN STD_LOGIC; -- 时钟信号 CLR : IN STD_LOGIC; -- 清零信号
ENABL : IN STD_LOGIC; -- 计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果 END COUNTER32B;
ARCHITECTURE behav OF COUNTER32B IS
SIGNAL CQI1,CQI2,CQI3,CQI4,CQI5,CQI6,CQI7,CQI8 :STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
PROCESS(FIN, CLR, ENABL) BEGIN
IF CLR = '1' THEN CQI1<= (OTHERS=>'0'); -- 清零 CQI2<= (OTHERS=>'0'); CQI3<= (OTHERS=>'0'); CQI4<= (OTHERS=>'0'); CQI5<= (OTHERS=>'0'); CQI6<= (OTHERS=>'0'); CQI7<= (OTHERS=>'0'); CQI8<= (OTHERS=>'0');
ELSIF FIN'EVENT AND FIN = '1' THEN
IF ENABL = '1' THEN IF CQI1=\"1001\" THEN CQI1<=\"0000\"; IF CQI2=\"1001\" THEN CQI2<=\"0000\"; IF CQI3=\"1001\" THEN CQI3<=\"0000\"; IF CQI4=\"1001\" THEN CQI4<=\"0000\"; IF CQI5=\"1001\" THEN CQI5<=\"0000\"; IF CQI6=\"1001\" THEN CQI6<=\"0000\"; IF CQI7=\"1001\" THEN CQI7<=\"0000\"; IF CQI8=\"1001\" THEN CQI8<=\"0000\"; ELSE CQI8<=CQI8+1; END IF; ELSE CQI7<=CQI7+1; END IF; ELSE CQI6<=CQI6+1; END IF; ELSE CQI5<=CQI5+1; END IF; ELSE CQI4<=CQI4+1; END IF; ELSE CQI3<=CQI3+1; END IF; ELSE CQI2<=CQI2+1; END IF; ELSE CQI1<=CQI1+1; END IF; ELSE CQI8<=CQI8;CQI7<=CQI7;CQI6<=CQI6;CQI5<=CQI5; CQI4<=CQI4;CQI3<=CQI3;CQI2<=CQI2;CQI1<=CQI1; END IF; END IF; END PROCESS;
DOUT <=CQI8 & CQI7 & CQI6 & CQI5 & CQI4 & CQI3 & CQI2 & CQI1; END behav;
LIBRARY IEEE; --32位锁存器 USE IEEE.STD_LOGIC_11.ALL; ENTITY REG32B IS
PORT ( LK : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END REG32B;
ARCHITECTURE behav OF REG32B IS BEGIN
PROCESS(LK, DIN)
BEGIN
IF LK'EVENT AND LK = '1' THEN DOUT <= DIN; END IF; END PROCESS; END behav;
顶层电路
实验五:ADC0809采样控制电路的实现(教材P219 8-2)
电路连接:将FPGA板的JK6插座与“模数转换模块”的J2插座用10芯线连接;将FPGA板的JK7插座与“模数转换模块”的J3插座用10芯线连接;将FPGA板的JK1插座与“6位HEX译码输出” 模块的1、2数码管插座用10芯线连接;(D1→A15,C1→A16,B1→A17,A1→A18,D2→C14,C2→B20,B2→B19,A2→B18;)FPGA板的时钟(65536Hz)接M1;模拟信号由IN0输入(已接好)引脚锁定:将FPGA板的CLK--M1;(频率选择65536Hz)“模数转换模块”的时钟接模块左上角3芯插座的CLK(频率选择65536Hz);操作:旋转电位器可改变输入电压在0-5V间变化;标度变换:Vo(V)=显示值(转换为10进制数)*5/255。
参考电路
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL; ENTITY adcCTRL IS
PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --来自0809转换好的8位数据 CLK : IN STD_LOGIC; --状态机工作时钟(65536Hz) EOC : IN STD_LOGIC; --转换状态指示,低电平表示正在转换 ALE : OUT STD_LOGIC; --8个模拟信号通道地址锁存信号 START : OUT STD_LOGIC; --转换开始信号
OE : OUT STD_LOGIC; --数据输出3态控制信号
ADD : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); --信号通道最低位控制信号 --LOCK0 : OUT STD_LOGIC; --观察数据锁存时钟
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位数据输出 END adcCTRL;
ARCHITECTURE behav OF adcCTRL IS
TYPE states IS (st0, st1, st2, st3,st4) ; --定义各状态子类型 SIGNAL current_state, next_state: states :=st0 ; SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK : STD_LOGIC; -- 转换后数据输出锁存时钟信号 BEGIN
ADD <= \"000\";--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道IN1 Q <= REGL; --LOCK0 <= LOCK ;
COM: PROCESS(current_state,EOC) BEGIN --规定各状态转换方式 CASE current_state IS
WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0'; next_state <= st1; --0809初始化
WHEN st1=>ALE<='1';START<='1';LOCK<='0';OE<='0'; next_state <= st2; --启动采样
WHEN st2=> ALE<='0';START<='0';LOCK<='0';OE<='0';
IF (EOC='1') THEN next_state <= st3; --EOC=1表明转换结束 ELSE next_state <= st2; END IF ; --转换未结束,继续等待
WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1'; next_state <= st4;--开启OE,输出转换好的数据
WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1'; next_state <= st0; WHEN OTHERS => next_state <= st0; END CASE ;
END PROCESS COM ; REG: PROCESS (CLK) BEGIN
IF (CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF; END PROCESS REG ;-- 由信号current_state将当前状态值带出此进程:REG
LATCH1: PROCESS (LOCK) -- 此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL <= D ; END IF; END PROCESS LATCH1 ; END behav;
实验6:移位相加硬件乘法器设计(P310 10-1)
操作方法:开关L1置1(上)设置A数,置0(下)设置B数;开关L2拨上设置低位(16进制);开关L3拨上设置高位(16进制);开关L4拨上再拨下清零;开关L5上下拨动8次做出结果。电路连接:将FPGA板的JK5插座与底板的J7插座相连;将FPGA板的\"JK1\"、\"JK2\"等3个相邻的插座与\"6位HEX译码输出\"数码管显示板的对应3个插座连接起来;clk1Hz(1Hz)接FPGA板CLK1.引脚锁定:clk1Hz--M1;SEL--Y10;INL--Y16;INH--R20;CLK--P3;START--G20DI锁在5-6两个数码管上,用来显示输入数据DOUT锁在1-4四个数码管上,显示结果(16进制)
参考电路
LIBRARY IEEE; --输入电路 USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DATAINPUT IS
PORT( clk: IN STD_LOGIC; --计数时钟=1Hz INH, INL : IN STD_LOGIC; --A,B数输入使能
sel: IN STD_LOGIC; --A,B数输入选择:1=输入A数;0=输入B数 DisplayInput: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--输入数据显示输出 AOUT,BOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );--输出 END DATAINPUT;
ARCHITECTURE behav OF DATAINPUT IS signal a1,a2,b1,b2:STD_LOGIC;
signal AOUT1,BOUT1:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
PROCESS(sel) --时钟分配输出选择,sel=1,时钟分配给A计数器,同时显示A数据;sel=0,时钟分配给B计数器,同时显示B数据; BEGIN
if sel= '1' THEN a1<= INL and clk;b1<= INH and clk;DisplayInput<=AOUT1; else a2<= INL and clk;b2<= INH and clk;DisplayInput<=BOUT1; end if;
END PROCESS;
PROCESS(b1)--A数计数器高位 variable q1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
if b1'EVENT AND b1 = '1' THEN q1:=q1+1; end if; AOUT1(7 DOWNTO 4)<=q1; END PROCESS;
PROCESS(a1) --A数计数器低位 variable q2:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
if a1'EVENT AND a1 = '1' THEN q2:=q2+1; end if; AOUT1(3 DOWNTO 0)<=q2; END PROCESS;
PROCESS(b2) --B数计数器高位 variable q1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
if b2'EVENT AND b2 = '1' THEN q1:=q1+1; end if; BOUT1(7 DOWNTO 4)<=q1; END PROCESS;
PROCESS(a2) --B数计数器低位 variable q2:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
if a2'EVENT AND a2 = '1' THEN q2:=q2+1; end if; BOUT1(3 DOWNTO 0)<=q2; END PROCESS;
AOUT<=AOUT1;BOUT<=BOUT1; END behav;
LIBRARY IEEE; --1位乘法器 USE IEEE.STD_LOGIC_11.ALL;
ENTITY ANDARITH IS -- 选通与门模块 PORT ( ABIN : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END ANDARITH;
ARCHITECTURE behav OF ANDARITH IS BEGIN
PROCESS(ABIN, DIN) BEGIN
FOR I IN 0 TO 7 LOOP -- 循环,完成8位与1位运算 DOUT(I) <= DIN(I) AND ABIN; END LOOP; END PROCESS; END behav;
LIBRARY IEEE; -- 8位右移寄存器 USE IEEE.STD_LOGIC_11.ALL;
ENTITY SREG8B IS PORT ( CLK : IN STD_LOGIC; LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC ); END SREG8B;
ARCHITECTURE behav OF SREG8B IS
SIGNAL REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
PROCESS (CLK, LOAD) BEGIN
IF LOAD = '1' THEN REG8 <= DIN; ELSIF CLK'EVENT AND CLK = '1' THEN
REG8(6 DOWNTO 0) <= REG8(7 DOWNTO 1); END IF;
END PROCESS;
QB <= REG8(0); -- 输出最低位 END behav;
LIBRARY IEEE; --8位加法器 USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADDER8 IS
PORT(B, A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(8 DOWNTO 0) ); END ADDER8;
ARCHITECTURE behav OF ADDER8 IS BEGIN
S <= '0'&A + B ; END behav;
LIBRARY IEEE; --16位锁存器/右移寄存器 USE IEEE.STD_LOGIC_11.ALL;
ENTITY REG16B IS PORT ( CLK,CLR : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END REG16B;
ARCHITECTURE behav OF REG16B IS
SIGNAL R16S : STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN
PROCESS(CLK, CLR) BEGIN
IF CLR = '1' THEN R16S <= (OTHERS =>'0') ; -- 清零信号
ELSIF CLK'EVENT AND CLK = '1' THEN --时钟到来时,锁存输入值,并右移低8 R16S(6 DOWNTO 0) <= R16S(7 DOWNTO 1); -- 右移低8位 R16S(15 DOWNTO 7) <= D; -- 将输入锁到高8位 END IF; END PROCESS; Q <= R16S; END behav;
顶层电路
实验七:直流电机PWM控制实验(P400 13-4)
电路连接:用10芯电缆将FPGA板的JK5插座与底板的J7插座相连接用10芯电缆将FPGA板的JK6插座与电机控制板的J1插座相连接将FPGA板的CLK_M1与底板标准时钟信号源的1024Hz相连接将FPGA板的CLK_B12与底板标准时钟信号源的1Hz相连接
引脚锁定:CLK1KHz--M1CLK1Hz--B12ZZ--G20FZ--R20STAT--Y16Z_F--Y10Z--A6F--A5
操作:L1--正反转控制,1=正传,0=反转L2--启动/停止控制,1=启动,0=停止L3--减速控制,1=减速,0=禁止L4--加速控制,1=加速,0=禁止
参考设计:
LIBRARY IEEE; -- 16进制计数器 USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT16 IS
PORT ( CLK : IN STD_LOGIC;
AA : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END CNT16;
ARCHITECTURE behav OF CNT16 IS
SIGNAL CQI,CQII : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
PROCESS(CLK) BEGIN
IF CLK'EVENT AND CLK = '1' then CQI <= CQI + 1; END IF; if CQI<1 THEN CQII<=\"0001\";
ELSE
CQII<=CQI; END IF; END PROCESS; AA <= CQII; END behav;
LIBRARY IEEE; -- 可逆16进制计数器 USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT16UD IS
PORT ( CLK : IN STD_LOGIC; U_D: IN STD_LOGIC;
AA : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END CNT16UD;
ARCHITECTURE behav OF CNT16UD IS
SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0):=\"0000\"; BEGIN
PROCESS(CLK) BEGIN
IF CLK'EVENT AND CLK = '1' then IF U_D='1' THEN IF CQI=\"1111\"THEN CQI<=\"1111\"; ELSE CQI <= CQI + 1; END IF; ELSE
IF CQI=\"0000\"THEN CQI<=\"0000\"; ELSE CQI <= CQI - 1; END IF; END IF; END IF; END PROCESS; AA <= CQI; END behav;
LIBRARY IEEE; --比较器 USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COMP IS
PORT ( A,B: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
C: OUT STD_LOGIC); END COMP;
ARCHITECTURE behav OF COMP IS BEGIN
PROCESS(A,B) BEGIN
IF A<=B then C<='1'; ELSif A>B then C<='0'; else
C<='0'; END IF; END PROCESS; END behav;
顶层电路
因篇幅问题不能全部显示,请点此查看更多更全内容