2016.3.30 Vivado Day1 Q3

0.待解決

以下,有三個未解決問題:1,3,5斜體部分

1.模塊調用

模塊調用的時候,被調用模塊名在前 eg: BeFunction Main(.F1(M1),.F2(M2),......),其中,BeFunction為被調用函數名,Main可以隨意定義,F1等是Function中的input output,M1是Main中的各種類型變量,注意reg-input wire-output(見2)

還有,如果想更改被調用模塊的某參量,怎么改來著,忘了,查一下。

2.Wire與Reg

好多時候不能賦值不能引用都是這種錯誤,通常,reg可以多次賦值作為中間變量,而Wire常用作輸出,簡單的說就是Reg常作為輸入,wire常作為輸出,在Testbench中,將input替換為reg output替換為wire。如果非要調用wire型的數據,則需要定義一個reg型中間變量,去隨意調用更改,最終別忘了assign (wire) a = (reg) b;即可

3.always多個判斷條件

always @ (posedge clk or negedge clk)是錯誤的,如果我想做到,當clk跳變時,則...,這個本人暫時沒有找到解決辦法,求大神們解答。

4.Testbench

如果想在TestBench中顯示一個中間變量,則需要在主程序中:

output a;

...

assign a = b;

只不過仿真完了之后記得將原程序中加進去的這些東西注釋掉,不然會讓你分配管腳,沒法玩了

5.數字鐘時序問題

見黑體字

always @(posedge SecClk) begin

//MinCnt <= 0;HourCnt <=0;

if(SecL < 9) SecL <= SecL + 1;

else if(SecH < 5) begin

SecL <= 0;SecH <= SecH + 1;

end

else begin

SecL <= 0;SecH <= 0;MinCnt <= 1;

end

end

// 分計數

//時與分進位標志變量如果在秒中定義容易出現進位時 時鐘過短,

//在時分計數執行完之后定義,

//如果為always@(MinCnt)會出現低位跳變,

//即0->2->4或者1->3->5這種?

//原因正在查究,總之注意為posedge

always @(posedge MinCnt) begin

if(MinL < 9) MinL <= MinL + 1;

else if(MinH < 5) begin

MinL <= 0;MinH <= MinH + 1;

end

else begin

MinL <= 0;MinH <= 0;HourCnt <= 1;

end

MinCnt <= 0;

end

6.波形文件的打開

當你雙擊的時候會很苦惱,不如Open WCFG

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容