190 likes | 386 Views
学习情景四. BCD 计数器的设计. 掌握 VHDL 语言的基本描述语句的使用方法。 掌握 VHDL 语言的时序逻辑电路的设计方法。. VHDL 的基本语句. 顺序语句 并行语句. 顺序语句 (Sequential Statements). 顺序语句是相对于并行语句而言。顺序语句的特点是用顺序语句描述的逻辑功能与先后顺序有关。 顺序语句通常用来描述各种逻辑功能,即算法的实现。 顺序语句只能在进程和子程序中使用。 VHDL 有以下六种顺序语句。 赋值语句; 流程控制语句; 等待语句; 子程序调用语句; 返回语句; 空操作语句。. 1 赋值语句.
E N D
学习情景四 BCD计数器的设计
掌握VHDL语言的基本描述语句的使用方法。 • 掌握VHDL语言的时序逻辑电路的设计方法。
VHDL的基本语句 • 顺序语句 • 并行语句
顺序语句(Sequential Statements) 顺序语句是相对于并行语句而言。顺序语句的特点是用顺序语句描述的逻辑功能与先后顺序有关。 顺序语句通常用来描述各种逻辑功能,即算法的实现。 顺序语句只能在进程和子程序中使用。VHDL有以下六种顺序语句。 赋值语句; 流程控制语句; 等待语句; 子程序调用语句; 返回语句; 空操作语句。
1 赋值语句 信号赋值语句 变量赋值语句 变量赋值语句:=赋值源; 信号赋值语句〈=赋值源; VARIABLE a, b: STD_LOGIC; SIGNAL C1:STD_LOGIC_VECTOR(1 TO 4); … a:=‘1’; --变量赋值 b:=‘0’; --变量赋值 C1<=‘1010’ ---信号赋值
信号赋值示例 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff1 IS PORT (clk,d1 : IN STD_LOGIC; q : OUT STD_LOGIC); END dff1; ARCHITECTURE bhv OF dff1 IS SIGNAL a,b : std_logic; --在结构体中定义两个信号a和b BEGIN PROCESS (clk ) BEGIN IF rising_edge(clk) then -- rising_edge()是上升沿检测语句 a<=d1 ; b<=a; q<=b; END IF ; END PROCESS ; END bhv ;
变量赋值 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff2 IS PORT (clk,d1 : IN STD_LOGIC; q : OUT STD_LOGIC); END dff2; ARCHITECTURE bhv OF dff1 IS BEGIN PROCESS (clk ) variable a,b:std_logic --变量只能在进程中定义和使用 BEGIN IF rising_edge(clk) then -- rising_edge()是上升沿检测语句 a:=d1 ; b:=a; q<=b; END IF ; END PROCESS ; END bhv ;
省略赋值语句 在位较多的矢量赋值中,为了简化表达可以使用短语“(OTHERS=>X)”作省略化的赋值。 如 … SIGNAL A1:STD_LOGIC_VSECTOR(4 DOWNTO 0); VARIABLE B1:STD_LOGIC_VSECTOR(7 DOWNTO 0); … A1〈=(OTHERS=>’0’); B1:=(OTHERS=>’1’); 利用赋值语句还可以给位矢量的某些位赋值之后再用OTHERS给剩余的位赋值。 如 A1〈=(1=〉’1’,4=〉’1’。。。OTHERS =>’0’)
2流程控制语句 流程控制语句是通过设置条件、判断条件是否成立来控制语句的执行。 IF语句,Case语句,Loop语句,Next语句,Exit语句 • IF语句 • IF 条件句 THEN ---第一种基本结构。 • 顺序语句; • END IF; • 例 • IF (a>b)THEN • output<=‘1’; • End if
IF语句 • IF 条件句 THEN ---第二种基本结构。 • 顺序语句; • ELSE • 顺序语句; • END IF; • 例 • IF sel THEN • output<=‘A’; • ELSE • output<=‘B’; • End if
IF语句 • IF 条件句 THEN ---第三种基本结构。 • IF 条件句 THEN • 顺序语句; • END IF; • END IF; • IF语句 • IF 条件句 THEN ---第四种基本结构。 • 顺序语句; • ELSIF 条件句 THEN • 顺序语句; • END IF;
BCD计数器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt10 is port(clk: in std_logic; count: out std_logic_vector(3 downto 0) ); end cnt10; Architecture behav of cnt10 is Signal tmp:std_logic_vector(3 downto 0); Begin Process(clk) Begin if rising_edge(clk) then if (tmp=‘1001’) then tmp<=‘0000’; Else tmp<=tmp+1; End if; End if; Count<=tmp; End process; End behav;h
异步清零、同步置数端的四位二进制加法计数器异步清零、同步置数端的四位二进制加法计数器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY scount IS PORT (CLK : IN STD_LOGIC; RST : IN STD_LOGIC; ENA : IN STD_LOGIC; OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END scount;
ARCHITECTURE behav OF scount IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN P_REG: PROCESS(CLK, RST, ENA) BEGIN IF RST = '1' THEN CQI <= "0000"; ELSIF CLK'EVENT AND CLK = '1' THEN IF ENA = '1' THEN CQI <= CQI + 1; ELSE CQI <= "0000"; END IF; END IF; OUTY <= CQI ; END PROCESS P_REG ; COUT <= CQI(0) AND CQI(1) AND CQI(2) AND CQI(3); END behav;
设计任务1: 设计带有异步复位和同步时钟使能的十进制 加法计数器 • 十进制计数器的外围引脚图
LIBRARY IEEE; • USE IEEE.STD_LOGIC_1164.ALL; • USE IEEE.STD_LOGIC_UNSIGNED.ALL; • ENTITY CNT10 IS • PORT (CLK,RST,EN : IN STD_LOGIC; • CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); • COUT : OUT STD_LOGIC ); • END CNT10; • ARCHITECTURE behav OF CNT10 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; --允许计数, 检测是否小于9 • ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零 • END IF; • END IF; • END IF; • IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号 • ELSE COUT <= '0'; • END IF; • CQ <= CQI; --将计数值向端口输出 • END PROCESS; • END behav;
其中,CLK为时钟输入端;CLR为异步复位输入端,CLR=1时复位;ENA为同步时钟使能输入端,ENA=1时使能有效,允许计数;CQ[3..0]为十进制计数输出端;CARRY_OUT为十进制计数进位其中,CLK为时钟输入端;CLR为异步复位输入端,CLR=1时复位;ENA为同步时钟使能输入端,ENA=1时使能有效,允许计数;CQ[3..0]为十进制计数输出端;CARRY_OUT为十进制计数进位 • 输出端,即CQ输出为1001时输出为1。
引脚锁定及硬件测试。 • 建议选GW48 系统的实验电路模式5,硬件验证计数器的工作性能。