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