1、Error (10158): Verilog HDL Module Declaration error at h_adder.v(1): port "co" is not declared as port(错误(10158):h_adder.v(1)处的Verilog HDL模块声明错误:端口“co”未声明为端口)
解法:加上outputXXX
2、Error (10137): Verilog HDL Procedural Assignment error at h_adder.v(7): object "so" on left-hand side of assignment must have a variable data type(错误(10137):h_adder.v(7)处的Verilog HDL过程分配错误:分配左侧的对象“so”必须具有可变数据类型)
解法:左边数据类型错误,更改为reg
wire型变量存在于begin...end语句之外。只能用assign语句进行赋值。(assign语句和时钟无关,只要等号右侧变量改变,左侧变量就会随之发生改变)
reg型相当于储存器的基础上,可以看做是一个一个的寄存器,当触发条件达成时,寄存器的内容才发生改变,否则一直保持上一个状态。
由此:reg型变量存在于begin...end语句之中。一般在always,initial语句中
原文链接:https://blog.csdn.net/zpc0212/article/details/82715685
参考:wire(组合逻辑)
wire用来连接模块实例化的输入和输出端口;
wire用作实际模块声明中输入和输出;
wire 元素必须由某些东西驱动,并且在没有被驱动的情况下,无法存储值;
wire 元素不能用在 always模块中 = 或者 <= 的左边;
wire元素是assign语句左侧 唯一的合法类型;
wire 元素是在基于Verilog的设计中连接两片的无状态方式;
wire 只能用在 组合逻辑;
reg 和 wire类似,但它可以用来存储信息(状态),就像寄存器
reg可以连接到模块实例化的输入端口;
reg 不能连接到模块实例化的输出端口;
reg 可以用作实际模块声明中的输出;
reg 不能 用作实际模块声明中的输入;
reg是always 模块中 = 或者 <= 左侧的唯一正确类型;
reg是initial模块中 = 左侧唯一的合法类型;
reg**不能用在assign的左边**;
reg 当与always @(posedge Clock)块结合使用时,reg可用于创建寄存器。
原文链接:https://blog.csdn.net/u012292754/article/details/72674776
3、“always @(*)”中‘*’所代表的意思
简单来说就是*代表着对输出语句有影响的输入量的变化,可参考以下文章
always@(*)
里面的敏感变量为*,参考:
http://t.csdn.cn/AfUL4以及http://t.csdn.cn/JfzYW
4、VHDL基本知识