?? 92_wss_stringreg.vhd
字號(hào):
--the mem_string
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.all;
--unsigned.ALL;
USE work.pkg_types.ALL;
USE work.pkg_components.ALL;
ENTITY mem_string IS
PORT ( clk : IN bit1 ;
reset : IN bit1 ;
sel_read : IN bit1 ;
s_sel : IN bit1 ;
burst : IN bit2_r ;
s_req : OUT bit1 ;
s_ack : IN bit1 ;
s_valid : IN bit1 ;
data_in : IN bit8 ;
s_ad : IN bit5 ;
s : out bit8 ;
s_done : out bit1 );
END mem_string;
ARCHITECTURE behavior OF mem_string IS
SIGNAL a1,addr : bit5_r;
SIGNAL sel_write : bit1;
BEGIN
PROCESS
--地址初始化
PROCEDURE init (burst : IN bit2_r;SIGNAL a1 : OUT bit5_r) IS
BEGIN
addr <= burst & "000";
a1 <= burst & "000";
END init;
--寫RAM,即更新相應(yīng)地址信號(hào)
PROCEDURE write_ram ( sel_write : IN bit1; data : IN bit8) IS
BEGIN
a1 <= addr;
END write_ram;
BEGIN
--初始化信號(hào)值
s_req <= '0';
s_done <= '1';
addr <= "00000";
sel_write <= '0';
--直到mem_string為工作狀態(tài)且被選中,當(dāng)時(shí)鐘上升沿到來時(shí),
WAIT UNTIL (s_sel = '1' AND rising_edge(clk) AND reset='1');
--找到相應(yīng)burst的開始位置,并且置mem_string為寫入狀態(tài)
init(burst,addr);
s_done <= '0';
s_req <= '1';
WAIT UNTIL ((s_ack='1' AND rising_edge(CLK)) OR reset/='1');
--得到應(yīng)答信號(hào)s_ack后,撤消s_req信號(hào)
s_req <= '0';
write_loop : LOOP
--等到addr有效且地址信號(hào)不為邊界
--因?yàn)橐粋€(gè)burst設(shè)定為8個(gè)字符
IF s_valid/='1' AND addr/=7 AND addr/=15 AND addr<23 THEN
WAIT UNTIL ((s_valid='1' AND rising_edge(clk)) OR reset/='1');
--復(fù)位則退出
IF reset/='1' THEN
EXIT write_loop;
END IF;
END IF;
--寫入8個(gè)字符,一個(gè)字符為8位
addr <= addr +1;
write_ram(sel_write,data_in);
--寫入完成后,寫信號(hào)置位防止寫入不正確的數(shù)據(jù)
sel_write <= '1';
--當(dāng)?shù)刂愤_(dá)到邊界或mem_string復(fù)位時(shí)退出
IF addr=7 OR addr=15 OR addr>=23 OR reset/='1' THEN
WAIT UNTIL rising_edge(clk);
EXIT write_loop;
END IF;
WAIT UNTIL rising_edge(clk);
sel_write <='0';
END LOOP write_loop;
END PROCESS;
string_mem :mem_24x8
PORT MAP (s,data_in,s_ad,a1,sel_read,sel_write,clk);
END behavior;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -