エラー数カウント


1)最終課題で必要な、エラー数のカウントの方法の例を示す。

上図で、CLK、STARTはオリジナルな信号である。ここでは、ノイズの多い(0dB)とノイズのない(100dB)の信号を復調した信号を作成し、エラーの発生している箇所を数える方法を示す。


2)VHDL記述の例

以下の上記シミュレーションを実現するVHDL記述を示す。

sigdump/sigdump.vhd

その他の必要なファイルとしては

sigdump/start.txt

sigdump/rxin0DB.txt

sigdump/rxin100DB.txt

 

library STD, IEEE; 
use STD.TEXTIO.all; 
use IEEE.std_logic_1164.all; 
use IEEE.std_logic_textio.all; 
use IEEE.std_logic_unsigned.all; 

entity SIGDUMP is 
end SIGDUMP; 

architecture SIM_DATA of SIGDUMP is 
 signal START : std_logic; 
 signal RXIN0DB : std_logic_vector(7 downto 0); 
 signal RXIN100DB : std_logic_vector(7 downto 0); 
 signal REF : std_logic; signal DEMOD : 
 std_logic; signal ENABLE : 
 std_logic; signal CLK : std_logic := '0'; 
 signal COUNT : std_logic_vector(2 downto 0); 
 signal DIFF : 
 std_logic; signal ECOUNT,TCOUNT: integer := 0;

いつもどおりの宣言

begin 
-- Sysetem CLK generation 
CLK <= not CLK after 5 ns; 

-- TEST VECTOR 
P1: process 
file TEXT1_IN : text is in "start.txt"; 
file TEXT2_IN : text is in "rxin0DB.txt"; 
file TEXT3_IN : text is in "rxin100DB.txt"; 
variable LINE1_IN : line; 
variable LINE2_IN : line; 
variable LINE3_IN : line; 
variable V_START : std_logic; 
variable V_RXIN0DB : std_logic_vector(7 downto 0); 
variable V_RXIN100DB : std_logic_vector(7 downto 0); 
begin 
 readline(TEXT1_IN, LINE1_IN); 
 read(LINE1_IN, V_START); 
 START <= V_START; 
 readline(TEXT2_IN, LINE2_IN); 
 read(LINE2_IN, V_RXIN0DB); 
 RXIN0DB <= V_RXIN0DB; 
 readline(TEXT3_IN, LINE3_IN); 
 read(LINE3_IN, V_RXIN100DB); 
 RXIN100DB <= V_RXIN100DB; 
 wait for 10 ns; 
 if endfile(TEXT1_IN) then wait; 
 end if; 
end process; 

クロック生成

 

 

 

 

 

 

 

ファイルからの信号生成

 

-- CORRECT SIGNAL : REF -- DEMOD SIGNAL : DEMOD 
process(CLK) begin 
 if (CLK'event and CLK='1') then 
  REF <= RXIN100DB(7); 
  DEMOD <= RXIN0DB(7); 
 end if; 
end process; 

信号の符号による復調

正ならば'0'

負ならば'1'

-- ENABLE GENERATOR 
process(CLK) begin
  if (CLK'event and CLK='1') then
   if(START='1') then COUNT <= "111"; 
  else 
   if(COUNT(2)='1') then COUNT <= COUNT - 1; 
   else COUNT <= COUNT; 
   end if; 
  end if; 
 end if; 
end process; 

ENABLE <= COUNT(2); 

3ビットカウンタによる ENABLE信号の生成

-- ERROR COUNTER 
DIFF <= DEMOD xor REF; 

process(CLK) begin 
 if (CLK'event and CLK='0') then
   if (ENABLE='1') then 
    TCOUNT <= TCOUNT + 1; 
    if (DIFF='1') then ECOUNT <= ECOUNT +1; 
    end if; 
   end if; 
  end if; 
end process; 

end SIM_DATA;

DIFFはエラーかどうかの判定

ENABLE=’1’の区間で、

トータルデータTCOUNTと

エラーカウントECOUNTを

カウントしている。

コンフィギュ

configuration CFG_SIGDUMP of SIGDUMP is 
 for SIM_DATA 
 end for; 
end CFG_SIGDUMP;

 

詳細な説明は講義でやります。


宿題5

に対応する10000ビットの送信信号に対して復号できなかったビットエラー率を報告してください。

ビットエラー率(BER)とは、”エラービット数/トータルビット数” で定義されます。

 

上記BERをメイルにて下記の要領で報告せよ!

送り先: wada@ie.u-ryukyu.ac.jp

メイルタイトル: BER測定

以下の内容を含むこと

1) 学生番号

2)名前

3)4種類のSN比に対する BER値

以上