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

你可能感兴趣的:(2016.3.30 Vivado Day1 Q3)