【正文】
)。 a0 b0 a1 b1 cin c0 c1 時序邏輯電路的設(shè)計 時序電路中,任一時刻的輸出信號不僅取決于當(dāng)時的輸入信號,而且還取決于電路原來的狀態(tài),即還和以前的輸入信號及輸出有關(guān)。也就是說,時序邏輯電路具有記憶功能。 一:時鐘信號和復(fù)位信號 任何時序電路都是以時鐘信號為驅(qū)動程序的,時序電路也只有在時鐘信號的邊沿到來時,其狀態(tài)才發(fā)生改變。 因此,時鐘信號通常是描述時序電路的程序的執(zhí)行條件,時序電路也總是以時鐘進程形式來進行描述。 時鐘信號 1)、進程的敏感信號是時鐘信號 PROCESS(clock_Signal) BEGIN IF(clock_edge_condition)THEN Signal_out= Signal_in。 ?? END IF; END PROCESS。 2)、用進程中的 WAIT語句等待時鐘信號 PROCESS BEGIN WAIT ON(clock_Signal) UNTIL(clock_edge_condition) Signal_out= Signal_in。 ?? END PROCESS。 時鐘沿描述: 上升沿: If(clk’event and clk=‘1’)Then If(rising_edge(clk))Then Wait Until clk=‘1’ If(clk’last_value=‘0’and clk’event and clk=‘1’)Then 下降沿: If(clk’event and clk=‘0’)Then If(falling_edge(clk))Then Wait Until clk=‘0’ If(clk’last_value=‘1’and clk’event and clk=‘0’)Then 復(fù)位信號 觸發(fā)器的初始狀態(tài)是由復(fù)位信號來設(shè)置。 根據(jù)復(fù)位信號對觸發(fā)器復(fù)位的操作不同,分為同步復(fù)位和非同步復(fù)位(異步復(fù)位)兩種。 1)、 同步復(fù)位 2)、 非同步復(fù)位 當(dāng)復(fù)位信號有效,且在給定的時鐘邊沿到來時,觸發(fā)器才被觸發(fā)。 一旦復(fù)位信號有效,觸發(fā)器就被觸發(fā)。 在用 VHDL語言描述時,同步復(fù)位一定在以時鐘為敏感信號的進程中定義,且用 If語句來描述必要的復(fù)位條件。 PROCESS(clock_Signal) BEGIN IF(clock_edge_condition)THEN IF(reset_condition)Then Signal_out= reset_value。 Else Signal_out= Signal_in。 ?? END IF; END IF。 END PROCESS。 PROCESS BEGIN Wait on(clock_Signal) Until(clock_edge_condition) IF(reser_condition)Then Signal_out= reset_value。 Else Signal_out= Signal_in。 ?? END IF; END PROCESS。 在用 VHDL語言描述異步復(fù)位時,首先在進程的敏感信號中除時鐘信號外,還應(yīng)加上復(fù)位信號;然后用If語句來描述必要的復(fù)位條件;最后在 Eleif段描述時鐘信號邊沿條件,并加上 event屬性。 PROCESS(reset_Signal,clock_Signal) BEGIN IF(reset_condition)THEN Signal_out= reset_value。 Elsif(clock_event and clock_edge_condition)Then Else Signal_out= Signal_in。 ?? END IF; END PROCESS。 二: D觸發(fā)器 LIBRARY IEEE。 USE 。 ENTITY dff IS PORT (data,clk: IN STD_LOGIC。 Q: OUT STD_LOGIC)。 END dff。 ARCHITECTURE Behavior OF dff IS BEGIN PROCESS(clk) BEGIN IF clk39。EVENT AND clk=‘139。 THEN Q=data。 END IF。 END PROCESS。 END Behavior。 D CP Q Q clk data D觸發(fā)器 不推薦 LIBRARY IEEE。 USE 。 ENTITY dff IS PORT (data,clk: IN STD_LOGIC。 Q: OUT STD_LOGIC)。 END dff。 ARCHITECTURE Behavior OF dff IS BEGIN PROCESS BEGIN Wait Until clk39。EVENT AND clk=‘139。 Q=data。 END PROCESS。 END Behavior。 帶異步復(fù)位上升沿的 D觸發(fā)器 D CP Q Q clk data reset LIBRARY IEEE。 USE 。 ENTITY dff_reset IS PORT (data: IN STD_LOGIC。 clk: IN STD_LOGIC。 reset: IN STD_LOGIC。 Q: OUT STD_LOGIC)。 END dff_reset。 ARCHITECTURE dff OF dff_reset IS BEGIN PROCESS(clk,reset) BEGIN IF reset=‘0’THEN Q=‘0’。 Elsif clk’event and clk=‘1’ THEN Q=data。 END IF。 END IF。 END PROCESS。 END dff。 帶異步置位復(fù)位上升沿的 D觸發(fā)器 LIBRARY IEEE。 USE 。 ENTITY dff_asyn IS PORT (data: IN STD_LOGIC。 clk: IN STD_LOGIC。 reset: IN STD_LOGIC。 set: IN STD_LOGIC。 Q: OUT STD_LOGIC)。 END dff_asyn。 D CP Q Q clk data reset set ARCHITECTURE dff OF dff_asyn IS BEGIN PROCESS(clk,set,reset) BEGIN IF set=‘0’THEN Q=‘1’。 Elsif reset=‘1’THEN Q=‘0’。 Elsif clk’event and clk=‘1’ THEN Q=data。 END IF。 END PROCESS。 END dff。 帶異步復(fù)位和輸入使能上升沿的 D觸發(fā)器 D CP Q Q clk data reset en LIBRARY IEEE。 USE 。 ENTITY dff_ck_en IS PORT (data: IN STD_LOGIC。 clk: IN STD_LOGIC。 reset: IN STD_LOGIC。 en: IN STD_LOGIC。 Q: OUT STD_LOGIC)。 END dff_ck_en。 ARCHITECTURE dff OF dff_ck_en IS BEGIN PROCESS(clk,reset) BEGIN IF reset=‘0’THEN Q=‘0’。 Elsif clk’event and clk=‘1’ THEN IF en=‘1’ THEN Q=data。 END IF。 END IF。 END PROCESS。 END dff_ck_en。 三:寄存器 在數(shù)字系統(tǒng)中能夠用來存儲一組二進制碼的同步時序邏輯電路,一般由多位觸發(fā)器連接而成。通??梢园垂δ芊譃椋烘i存器和移位寄存器。 LIBRARY IEEE。 USE 。 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位鎖存器 串行輸入、并行輸出移位寄存器 移位寄存器除了具有存儲二進制碼的功能以外,還具有移位功能。即寄存器里面存儲的代碼能夠在時鐘的作用下依次進行左移或者右移。 移位寄存器不僅可以用來存儲數(shù)據(jù),還可以用來實現(xiàn)數(shù)值運算和數(shù)據(jù)處理等。 LIBRARY IEEE。 USE 。 USE 。 ENTITY shift IS PORT (clk,rst,data:IN STD_LOGIC。 q:OUT STD_LOGIC_VICTOR(7 downto 0))。 END shift。 ARCHITECTURE sh1 OF shift is Signal q_temp:STD_LOGIC_VECTOR(7 downto 0) BEGIN PROCESS(clk,rst) BEGIN IF rst=‘1’ THEN q_temp= (others=‘0’))。 Elsif clk’event and clk=‘1’ THEN