vivado在定义端口时将端口默认为wire类型,如果想要把这个端口作为reg类型需要额外定义。
错误一
这是最狗的一种错误,vivado并不会报错,但综合时vivado就不知道led这个端口是多少位了,所以综合得到的原理图没有标识led是多少位,因此led也不能正确输出
`timescale 1ns / 1ps
module top(
input sys_clk,
output [3:0] led
);
reg led;
always@(posedge sys_clk)
led=4'b0000;
endmodule
错误二
vivado会提示这个led变量被重复定义
错误三
虽然两处定义led都是定义为1位,但vivado仍然提示led这个变量被重复定义
正确的方法
最保险的方法是在端口声明时,一次性把端口led定义为output reg [3:0]定义完整
`timescale 1ns / 1ps
module top(
input sys_clk,
output reg [3:0] led
);
always@(posedge sys_clk)
led=4'b0000;
endmodule
综合得到的原理图,可见led作为output是4位