1 / 19

学习情景四

学习情景四. BCD 计数器的设计. 掌握 VHDL 语言的基本描述语句的使用方法。 掌握 VHDL 语言的时序逻辑电路的设计方法。. VHDL 的基本语句. 顺序语句 并行语句. 顺序语句 (Sequential Statements). 顺序语句是相对于并行语句而言。顺序语句的特点是用顺序语句描述的逻辑功能与先后顺序有关。 顺序语句通常用来描述各种逻辑功能,即算法的实现。 顺序语句只能在进程和子程序中使用。 VHDL 有以下六种顺序语句。 赋值语句; 流程控制语句; 等待语句; 子程序调用语句; 返回语句; 空操作语句。. 1 赋值语句.

sofia
Download Presentation

学习情景四

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 学习情景四 BCD计数器的设计

  2. 掌握VHDL语言的基本描述语句的使用方法。 • 掌握VHDL语言的时序逻辑电路的设计方法。

  3. VHDL的基本语句 • 顺序语句 • 并行语句

  4. 顺序语句(Sequential Statements) 顺序语句是相对于并行语句而言。顺序语句的特点是用顺序语句描述的逻辑功能与先后顺序有关。 顺序语句通常用来描述各种逻辑功能,即算法的实现。 顺序语句只能在进程和子程序中使用。VHDL有以下六种顺序语句。 赋值语句; 流程控制语句; 等待语句; 子程序调用语句; 返回语句; 空操作语句。

  5. 1 赋值语句 信号赋值语句 变量赋值语句 变量赋值语句:=赋值源; 信号赋值语句〈=赋值源; VARIABLE a, b: STD_LOGIC; SIGNAL C1:STD_LOGIC_VECTOR(1 TO 4); … a:=‘1’; --变量赋值 b:=‘0’; --变量赋值 C1<=‘1010’ ---信号赋值

  6. 信号赋值示例 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 ;

  7. 变量赋值 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 ;

  8. 省略赋值语句 在位较多的矢量赋值中,为了简化表达可以使用短语“(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’)

  9. 2流程控制语句 流程控制语句是通过设置条件、判断条件是否成立来控制语句的执行。 IF语句,Case语句,Loop语句,Next语句,Exit语句 • IF语句 • IF 条件句 THEN ---第一种基本结构。 • 顺序语句; • END IF; • 例 • IF (a>b)THEN • output<=‘1’; • End if

  10. IF语句 • IF 条件句 THEN ---第二种基本结构。 • 顺序语句; • ELSE • 顺序语句; • END IF; • 例 • IF sel THEN • output<=‘A’; • ELSE • output<=‘B’; • End if

  11. IF语句 • IF 条件句 THEN ---第三种基本结构。 • IF 条件句 THEN • 顺序语句; • END IF; • END IF; • IF语句 • IF 条件句 THEN ---第四种基本结构。 • 顺序语句; • ELSIF 条件句 THEN • 顺序语句; • END IF;

  12. 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

  13. 异步清零、同步置数端的四位二进制加法计数器异步清零、同步置数端的四位二进制加法计数器 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;

  14. 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;

  15. 设计任务1: 设计带有异步复位和同步时钟使能的十进制 加法计数器 • 十进制计数器的外围引脚图

  16. 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;

  17. 其中,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。

  18. 引脚锁定及硬件测试。 • 建议选GW48 系统的实验电路模式5,硬件验证计数器的工作性能。

More Related