assign
聲明用於驅動wire
s。
如果你已經聲明一個reg
,那麼你必須在程序中給它賦值(always
或initial
塊)。最好的做法是隻在相同的always
塊中設置reg
的值。例如:
always @(*) begin // combo logic block
if(some_condition) begin
icache_ram_rw = 1'b0;
end else begin
icache_ram_rw = something_else;
end
有reg
S和wire
s表示你應該讀了之間的重要區別。
我有一種感覺,雖然你需要一些時鐘邏輯,如果你正在駕駛RAM信號。在這種情況下,你需要的代碼看起來是這樣的:
// some parameter definitions to make logic 'read' clearer.
localparam READ = 1'b0;
localparam WRITE = 1'b1;
// standard clocked logic 'template' that synthesis tools recognise.
always @(posedge clk or negedge resetb)
if(!resetb) begin // asynchronous active low reset
icache_ram_rw <= READ;
end else if(some_enable_condition) begin
icache_ram_rw <= WRITE;
end else begin
icache_ram_rw <= READ;
end
感謝您的完整答案!鍾控邏輯的確出現在賦值中,爲了簡單起見,我在這裏省略了它(原來可能最好添加它)= D – 2009-12-08 14:49:11