
下面是FPGA編/解碼器編碼部分的代碼:
process(CLK2M,C64K)
begin
if C64K=′1′ then QQ1 <=(others=>′0′);else if CLK2M′
event and CLK=′1′ then if DATA_SR=′1′ then
QQ1 <=QQ1+1;end if;end if;
end process;
Q1 <=QQ1;
process(CLK2M,C64K)
begin
if C64K=′1′ then QQ <=(others =>′0′);else if CLK2M′
event and CLK2M=′1′ then if DATA_SR_N=′1′ then
QQ2 <=QQ2+1;end if;end if;
end process;
Q2 <=QQ2;
Q1_compare_Q2<=′1′ when Q1(7 downto 0)>Q2(7 downto 0)
else ′0′;
process(CLK2M)
begin
if CLK2M′ event and CLK2M=′1′ then if C64K_1n=′1′ then
Q<=Q1_compare_Q2;end if;end if;
end process;
以下為FPGA編/解碼器解碼部分的代碼:
process(CLK2M,F8K)
begin
if CLK2M′event and CLK2M=′1′ then if F8K=′0′ then
p<=(others =>′0′);else p<=p+1;end if;end if;
count<=p;
end process;
process(count(7 downto 5)) --msb comes out first;
begin
case count(7 downto 5) is
when ″000″=>Dout <=locked_ts(7);--locked_ts存儲的數據為解碼前的串口數據
when ″001″=>Dout<=locked_ts(6);
when ″010″=>Dout<=locked_ts(5);
when ″011″=>Dout<=locked_ts(4);
when ″100″=>Dout<=locked_ts(3);
when ″101″=>Dout<=locked_ts(2);
when ″110″=>Dout<=locked_ts(1);
when ″111″=>Dout<=locked_ts(0);
when others=>Dout<=′Z′;
end case;
end process;
asyn_out<=′0′ or Dout;
2.2 數字交換網絡功能的實現
數字交換網絡是通信卡實現數據交換的核心部分,其基本功能是在兩個不同時隙間進行交換(每個時隙對應一個用戶)。數字交換網絡由數據存儲器和控制存儲器兩部分組成。數據存儲器的工作方式是“順序寫入,控制讀出”,即由定時脈沖控制,按順序將不同時隙的數據寫入相應的單元中,寫入的單元號和時隙號一一對應,讀出時則要根據控制存儲器的控制信息(讀出數據)進行;控制存儲器是“控制寫入,順序讀出”,即數據寫入由CPU控制進行,而數據讀出由定時脈沖控制,按照時隙號讀出相對應單元內容[5]。
本設計的交換網容量為128(條)×128(條),假設基地址為BASE_ADDR,按單字節(jié)尋址,每個地址代表接收時隙號(目的時隙號),該地址對應的內容字節(jié)最高位指示是否做交換,“0”代表不交換,“1”代表做交換,低7位數據表示發(fā)送時隙號(源時隙號)。例如:要將N時隙發(fā)送到M時隙,使用如下等式:BASE_ADDR[M]=N|0X80,其中BASE_ADDR[M]為(BASE_ADDR+M)的地址;BASE_ADDR[M]=N|0X80表示將N與0X80相或后的值賦予(BASE_ADDR+M)的地址空間。
通信卡FPGA數字交換網絡的VHDL語言實現代碼如下所示。其中CLK2M為2MHz時鐘信號,F8K_1D為與CLK2M上升沿對齊的同步信號。
process(CLK2M) --產生讀CM的地址
begin
if CLK2M′event and CLK2M=′0′ then if F8K_1D=′0′ then
sm_ram_addr(6 downto 0)<=″0000001″;
else sm_ram_addr(6 downto 0)<=sm_ram_addr(6 downto 0)+1;
end if;end if;end if;
end process;
cm_ram_addr(6 downto 0)<=sm_ram_addr(6 downto 0)–′1′;
DRAM_SM:dual_ram_8_128 --數據存儲器
PORT MAP( addra =>sm_ram_addr(6 downto 0),
addrb =>cm_to_sm_addr(6 downto 0),
clka =>CLK2M,
clkb =>not CLK2M,
dina =>sm_in_data(7 downto 0), --數據存儲器輸入數據
doutb =>sm_out_data(7 downto 0),--數據存儲器讀出數據
ena =>′1′,
enb =>cm_to_sm_addr(7),--是否允許數據輸出
wea =>′1′);
DRAM_CM:dual_ram_8_128 --控制存儲器
PORT MAP( addra =>cpu_a(6 downto 0), --cpu地址
addrb =>cm_ram_addr(6 downto 0),
clka =>cpu_clk, --cpu時鐘信號
clkb =>CLK2M,
dina =>cpu_din(7 downto 0),--cpu輸入數據
doutb =>cm_to_sm_addr(7 downto 0),
ena =>not cs,--cs為FPGA的片選信號
enb =>′1′,
wea =>not cpu_rw);--cpu_rw為cpu的讀寫信號
基于FPGA設計的通信卡具有靈活性強、可控性好、硬件構架簡單等優(yōu)點。通信卡在實際應用中,很好地實現了各接口間的數據通信且其性能非常穩(wěn)定。另外,通信卡能根據需要對一些功能進行刪除和添加,方便了系統(tǒng)功能的調試,滿足了用戶的不同需求。
參考文獻
[1] 王俊雄,黃鉉,劉正義.基于FPGA的嵌入式系統(tǒng)設計.電子工程師,2006,(10).
[2] 陳曉竹,道克剛.PowerPC860嵌入式系統(tǒng)及應用.北京:機械工業(yè)出版社,2006.
[3] 錢志軍,鄧志宏.MC145572 ISDN U接口收發(fā)器與MC145574 ISDN S/T接口收發(fā)器用戶手冊.北京:人民郵電出版社,1998.
[4] 樊昌信,張甫翊.通信原理(第5版).國防工業(yè)出版社,2002.
[5] 葉敏.程控數字交換與現代通信網.北京:北京郵電大學出版社,1997.





