目标是14天刷完 HDLBits的题目
在这里做一些记录
模块:
module /*模块名*/
(
input /*输入端口名*/,
output /*输出端口名*/
);
/*语句*/
endmodule
模块例化:
/*模块名*/ /*例化模块名*/
(
./*端口名*/ (/*输入信号*/)
此种端口连接方式不对端口顺序做要求,也可按顺序连接端口
例:
module Full_Adder
(
input a,
input b,
input cin,
output cout,
output sum
);
assign {cout, sum} = a + b + cin;
endmodule
Full_Adder adder_1
(
.a (a[0]),
.b (b[0]),
.cin (cin),
.cout (cout[0]),
.sum (sum[0])
);
连线定义:
wire /*连线名*/
连续赋值:
assign LHS = RHS /*RHS赋给LHS,效果类似于RHS到LHS的单工连线*/
位运算符:
- 与 (AND) &
- 或 (OR) |
- 非 (NOT) ~
- 异或 (XOR) ^
向量:
wire [/*起始位*/ +: /*位宽*/] /*向量名*/; /*声明,从起始位递增*/
wire [/*起始位*/ +: /*位宽*/] /*向量名*/; /*从起始位递减*/
{/*向量A*/ , /*向量B*/, ...., /*向量X*/} /*拼接多个向量*/
{/*整数*/ {/*向量*/}} /*拼接符的另一种用法*/
符号溢出:两正数相加得到负数或两负数相加得到正数
检测方法:
module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow
);
assign s = a + b;
assign overflow = (a[7]&b[7]&~s[7]) | (~a[7]&~b[7]&s[7]);
//当输入值符号位均为0且输出符号位为1时,或输入值符号位均为1且输出符号为0时,发生符号溢出
endmodule