2012-04-17 58 views
1

Terasic DE1 FPGAボード上のSRAMチップに書き込もうとしていますが、トライステート制御でエラーが発生しています。SRAMインタフェース用のVerilog双方向バス

Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(32): object "SRAM_DATA" on left-hand side of assignment must have a variable data type 
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(33): object "SRAM_DATA" on left-hand side of assignment must have a variable data type 
Error (10219): Verilog HDL Continuous Assignment error at inputOutputControl.v(52): object "SRAM_LB_N" on left-hand side of assignment must have a net type 
Error (10219): Verilog HDL Continuous Assignment error at inputOutputControl.v(53): object "SRAM_UB_N" on left-hand side of assignment must have a net type 

は以下の通りであると我々は問題を抱えているモジュールは、誰もが私たちは、この作業を取得する方法上の任意の光を当てることができます。以下のようにエラーがありますか?

私はこの考えて
module ram_writer(
input    CLK, 
input    RESET_N, 
input    V_PORCH_EN, 
input    LOGIC_WE_N, 
input    LOGIC_CE_N, 
input  [17:0] LOGIC_WRITE_ADDRESS,   
input  [15:0] LOGIC_WRITE_DATA, 
input    VGA_OE_N, 
input    VGA_CE_N, 
input  [17:0] VGA_READ_ADDRESS,  
output  [15:0] VGA_READ_DATA, 
output reg   SRAM_OE_N, 
output reg   SRAM_WE_N, 
output reg   SRAM_CE_N, 
output reg   SRAM_LB_N, 
output reg   SRAM_UB_N, 
output reg [17:0] SRAM_ADDRESS,  
inout wire [15:0] SRAM_DATA 
); 

reg [15:0] writeData; 

always @(posedge CLK) 
begin 
    writeData  <= LOGIC_WRITE_DATA;      
    VGA_READ_DATA <= SRAM_DATA; 
end 

always @((posedge LOGIC_WE_N or writeData)) 
begin 
    if(LOGIC_WE_N == 1) SRAM_DATA = 16'bZ; 
    else SRAM_DATA = writeData; 
end 

always @(posedge CLK) 
begin 
    if(V_PORCH_EN == 1) begin 
    SRAM_ADDRESS <= LOGIC_WRITE_ADDRESS; 
    SRAM_CE_N <= LOGIC_CE_N; 
    SRAM_WE_N <= LOGIC_WE_N; 
    SRAM_OE_N <= 1; 
    end 
    else begin 
    SRAM_ADDRESS <= VGA_READ_ADDRESS; 
    SRAM_CE_N <= VGA_CE_N; 
    SRAM_OE_N <= VGA_OE_N; 
    SRAM_WE_N <= 1; 
    end 
end 

assign SRAM_LB_N = 0; 
assign SRAM_UB_N = 0; 

endmodule 

答えて

1

Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(32): object "SRAM_DATA" on left-hand side of assignment must have a variable data type 
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(33): object "SRAM_DATA" on left-hand side of assignment must have a variable data type 

はこれに指し:

if(LOGIC_WE_N == 1) SRAM_DATA = 16'bZ; 
else SRAM_DATA = writeData; 

A '線' データ型は何のメモリを持っていないので、あなたは、継続的な割り当てを使用していない割り当てる必要があります常にブロックする。逆に、ここで

assign SRAM_LB_N = 0; 
assign SRAM_UB_N = 0; 

あなたはそれが常にブロックに割り当てられる必要があり、継続的な割り当てを経由してREGタイプを割り当てることはできません。

+0

SRAM_LB_NとSRAM_UB_Nをワイヤタイプに変更しましたが、SRAM_DATAエラーを修正する方法はまだわかりません。 inoutポートをregにすることはできますか? –

+0

alwaysブロックを介して割り当てたregタイプのSRAM_DATA_REGを作成してから、 'assign SRAM_DATA = SRAM_DATA_REG;' – Tim

+0

またはワイヤタイプとしておきます。 SRAM_DATA = LOGIC_WE_Nを割り当てますか? 16'bZ:writeData; – Morgan