天天看點

關于PicoBlaze 讀操作的一個問題的讨論(一)

今天一個下午都在這個問題上掙紮,令PicoBlaze讀取四個switches的狀态值,顯示在LCD上,但是無論怎麼改變鍵值,始終讀回來的值是0xF,這說明沒有讀回來的值是錯誤的。

   造成錯誤的原因無非有兩個,一個psm軟體程式的問題,另一個當然是hdl邏輯的錯誤。

   首先我測試了彙程式設計式的原因,INPUT 是PicoBlaze的讀指令,測試的程式是這樣的(測試部分後用;注釋掉了)

display_sw: 
      
INPUT s6, SW    ;read the value of switches
      
;LOAD s6,aa
      
;OUTPUT s6,LED      

   我把讀到的鍵值顯示在LED上,發現顯示也是不變,進而得知是HDL的問題。

開始時的INPUT INTERFACE是這樣定義的

reg [7:0] in_port_data;
      
always @(posedge clk)
      
if(reset)
      
in_port_data <= 0;
      
else if(read_strobe==1 && port_id[0]==1)
      
in_port_data<={4'b0000,sw};
      
else in_port_data<=8'hzz;	  
      
assign in_port = in_port_data;	      

我的INPUT INTERFACE是最後是這樣定義的才得到正确結果

//----------------------------------------------------------------------------------------------------------------------------------
      
// Input interface  
      
//----------------------------------------------------------------------------------------------------------------------------------
      
reg [7:0] in_port_data;
      
always @*
      
if(port_id[0])
      
//error: sw的port_id是01,是以此處[]為0,錯作1
      
in_port_data={4'b0000,sw};
      
else  in_port_data=0;
      
assign in_port = in_port_data;	      
放一張read operation timing 圖      

user guide 曰: The  external circuit must ensure that  the  input data is  stable  during the  sampling edge to avoid  a timing violation.

這樣看來我的電路設計可能是造成了timing violation.看了别人的設計是這樣的,恍然大悟。

continuous access ports

OPTIMISM, PASSION & HARDWORK