2015-11-04 98 views
-1

我已經用Verilog編寫了這個程序,但是當我嘗試模擬它時,它只顯示XXXX ...在輸出和輸入變量上。我不明白我做錯了什麼...Verilog程序將不會讀取輸入

PS。在我給出的模擬文件中,例如值in = 16'b1101100100001111; #20;

module hamming_decoder(
output reg [10:0] out, 
output reg [3:0] error_index, 
output reg error, 
output reg uncorrectable, 
input [16:1] in 
); 

reg y; // in case "single error", gives the position of the error bit  
reg [1:0] check; // if check[0] = 0 - no error 
       // if check[0] = 1 and check[1] = 0 => double error 
       // if check[0] = 1 and check[1] = 1 => single error 


assign error_index[0] = in[16]^in[14]^in[12]^in[10]^in[8]^in[6]^in[4]^in[2]; 
assign error_index[1] = in[15]^in[14]^in[11]^in[10]^in[7]^in[6]^in[3]^in[2]; 
assign error_index[2] = in[13]^in[12]^in[11]^in[10]^in[5]^in[4]^in[3]^in[2]; 
assign error_index[3] = in[9]^in[8]^in[7]^in[6]^in[5]^in[4]^in[3]^in[2]; 

assign check[1] = in[1]^in[2]^in[3]^in[4]^in[5]^in[6]^in[7]^in[8]^in[9]^in[10]^in[11]^in[12]^in[13]^in[14]^in[15]^in[16]; 

always @(*) 
begin 
if (error_index[0] != 0 || error_index[1] != 0 || error_index[2] != 0 || error_index[3] != 0) 
    begin 
     check[0] = 1; 
     error = 1; 
    end 

if (check[0] == 0) 
    begin 
     error = 0; 
     uncorrectable = 0; 
     out[0] = in[1]; 
     out[1] = in[2]; 
     out[2] = in[3]; 
     out[3] = in[4]; 
     out[4] = in[5]; 
     out[5] = in[6]; 
     out[6] = in[7]; 
     out[7] = in[9]; 
     out[8] = in[10]; 
     out[9] = in[11]; 
     out[10] = in[13]; 
    end 
     else if(check[1] == 0) 
       begin 
        error = 1; 
        uncorrectable = 1; 
        out[0] = in[3]; 
        out[1] = in[5]; 
        out[2] = in[6]; 
        out[3] = in[7]; 
        out[4] = in[9]; 
        out[5] = in[10]; 
        out[6] = in[11]; 
        out[7] = in[12]; 
        out[8] = in[13]; 
        out[9] = in[14]; 
        out[10] = in[15]; 
       end 
      else if (check[1] == 1 && check[0] != 0) 
         begin 
          error = 1; 
          uncorrectable = 0; 
          y = error_index[0] + error_index[1] * 2 + error_index[2] * 4 + error_index[3] * 8; 
          out[0] = in[3]; 
          out[1] = in[5]; 
          out[2] = in[6]; 
          out[3] = in[7]; 
          out[4] = in[9]; 
          out[5] = in[10]; 
          out[6] = in[11]; 
          out[7] = in[12]; 
          out[8] = in[13]; 
          out[9] = in[14]; 
          out[10] = in[15]; 
          out[y-1] = !out[y-1]; // ? 
         end 
end 

endmodule 
+1

發佈您的測試臺代碼。 – toolic

回答

1

這可能是與測試臺端口連接有關的問題。你確定你的測試臺實例嗎?另外,爲了提供正確的輸入,您需要有一個用於週期性輸入的時鐘信號,否則所有的輸入都將在設計時在零模擬時間傳播。

此樣本16'b1101100100001111顯示爲單個錯誤輸入數據。如果您還要展示您的測試平臺,那將是非常棒的。

我模擬了你的代碼,併爲它提供了一個測試平臺。離開邏輯部分,設計似乎工作正常。測試臺可用here

編輯:

是的,你的設計是一個組合電路。從輸入到輸出的轉換應發生在零模擬時間。因此,只要發生在100ns,計算的值並且測試突然結束。 20ns延遲和中提琴後,只需添加in = 0 ..!

我在上面的EDAPlayground鏈接中附加了你的測試,只是添加了上述修改。關於測試平臺編碼基礎知識的這個PDF可能是有用的。

+0

這是我的Verilog測試夾具文件:'時間刻度1ns/1ps 模塊hamming_decoder_test; \t //輸入: \t reg [16:1] in; \t //輸出: \t wire [10:0] out; \t wire [3:0] error_index; \t電線錯誤; \t電線不可糾正; \t \t UUT hamming_decoder( \t \t .OUT(下), \t \t .error_index(error_index) \t \t .error(誤差), \t \t .uncorrectable(不可校正), \t \t。in(in) \t); \t初始開始 \t \t \t 在= 0 \t; \t \t#100; \t \t \t \t in = 16'b1110101110001011; \t \t \t \t#20; \t年底 endmodule –

+0

遺憾:這裏是該文件並顯示結果的打印屏幕:根據您輸入的修改我的答案http://we.tl/2ty5m8VbGZ –

+0

... – sharvil111