2016-08-18 34 views
-2
assign flag_temp[3:0] = ((op_dec == 5'b00000) ? flag_temp[3:0] : 
//ADD 
((op_dec == 5'b00001) ? flag_temp[3:0] :        
//SUB 
((op_dec == 5'b00010) ? flag_temp[1], flag_temp[3], flag_temp[0] = 1'b0, flag_temp[2] = 1'b0 : 
//MOV  
Status bits :- flag_ex[0] = carry; flag_ex[1] = zero; 
flag_ex[2] = overflow; flag_ex[3] = parity; 

我必須重置進位和溢出標誌,但它顯示語法和尺寸錯誤。Verilog錯誤:分配向量索引(維度錯誤)

回答

0

代碼中的某些語法可以修復。您可以通過{}運算符對一組信號進行分組。

wire [3:0] flag_temp; 
assign flag_temp [3:0] = (op_dec == 5'b00000) ? flag_temp[3:0] : 
       (op_dec == 5'b00001) ? flag_temp[3:0] : 
       (op_dec == 5'b00010) ? {flag_temp[1], flag_temp[3], flag_temp[0]} : {flag_temp[2]} ; 

有無與倫比的大括號。兩個打開((但是隻有一個關閉) 在賦值語句中還有賦值,flag_temp [0] = 1'b0,它擊敗了賦值本身的目的 另外flag_temp被賦值本身,沒有外部值。分配給它這將導致剩餘flag_temp「X」始終

意圖的代碼是我不太清楚,所以無法做出更有意義的建議


更新的代碼 - 。 以下是一些基於數據模型操作的示例代碼,其餘操作符可以添加到相似的行中。

對於現在針對特定操作而改變的信號,這些值被循環並且針對改變特定標誌的操作被添加到級聯「{}」操作符中。 最後是默認的原始值保留。

reg [3:0] x ; 
reg [3:0] y; 
wire [3:0] sum; 
wire carry_i = 1 ; // driven to 1 for example 
wire zero ; 
assign {carr_o,sum} = x+y+carry_i ; 

assign flag_ex[3:0] = (op_dec == 5'b00000) ? { flag_ex[3],flag_ex[2],flag_ex[1],carr_o} : // ADD 
         (op_dec == 5'b00001) ? { flag_ex[3],flag_ex[2],flag_ex[1],carr_o}: // SUB 
         (op_dec == 5'b00010) ? { flag_ex[3],flag_ex[2],zero,flag_ex[0]}: // MOV 
         flag_ex[3:0]; //default 
+0

它的處理器的代碼,我添加標誌(進位,溢出,零和奇偶校驗),它是強制使用數據流建模。意圖是重置進位和溢出標誌,而奇偶校驗和零將受(例如)A&B操作的影響。 – peregriuns19

+0

更新了代碼以使用簡單的數據流建模示例 –