开关级建模
开关就相当于传输门
-----------------------------------------------------------
Verilog设计的可综合性和思想
循环语句有的时候不可综合 少用
真值表描述
在写代码的时候 心里要有电路结构
wire [0:7] b; // 8-bit wire b[0]是这个向量的 最高位 MSB(most-significant bit) 比特顺序
always@(datain or sel) 等价(*)
case(sel)
值:语句;
endcase 语句可以说明所有的组合逻辑(真值表)
转载:信号变量有两种声明方式,一是使用 wire 或者 assign 语句进行显示声明和定义,二是综合器的隐式声明和定义。
当你将一个未定义声明的信号连接到模块的输入输出端口时,综合器会“热心”地帮助你声明这个信号。但我可以向你保证,综合器没有厉害到能通过上下文,察言观色,“热心而正确”地帮你声明信号,它只会将其声明为 1 bit wire 型信号,当你本来需要使用一个超过 1 bit 的向量,但又忘记声明时,综合器往往就好心办坏事了。
(当然综合器会在这个生成 Warning,所以查看下 Warning 是查找 BUG 的好办法)
wire [2:0] a, c; // Two vectors
assign a = 3'b101; // a = 101
assign b = a; // b = 1 隐式声明并定于了 b
wire assign c = b; // c = 001 <-- bug 来了 b 被 coder 默认为和 a 相同的 3'b101,但其实 b 只有 1bit宽
my_module i1 (d,e); // d e 都被隐式声明为 1bit wire
//如果模块期望的是 vector 那么 BUG 就产生了隐式声明的错误很容易在连接 IP 核的时候产生,从 IP 核模板文件复制来 IP 核模块后。往往会忘记声明连接 IP 模块之间的中间变量,而这些变量的隐式声明就可能被综合器“好心办了坏事”。
通过添加
`default_nettype none
宏定义会关闭隐式声明功能,那么这样一来,使用未声明的变量就会变成一个 Error 而不再只是 Warning。