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