个人笔记。
assign在verilog语言中一般用于连接两个变量,将一个变量的值不断赋值给另一个变量,比如在顶层模块中调用另一模块的变量。
例:
///二级模块
module compile(
input i_clk,
input nrst,
output [47:0] o_sentence //input、output不声明类型的话,默认为wire型
);
reg [47:0] sentence;
assign o_sentence[47:0]= sentence[47:0]; //左边的变量必须为wire型
endmodule
///顶层模块调用
wire [47:0] sentence;
compile compile_01(
.i_clk(clk_50m),
.nrst(nrst),
.o_sentence(sentence[47:0])
);
如果需要用逻辑分析仪仿真的话,可以在输出仿真变量中写入sentence[47:0]。
如:
ila_0 ila_0_1(
.clk(clk_50m),
.probe0(sentence[47:0])
);
注意:连续赋值assign语句独立于过程块,所以不能在always过程块中使用assign语句
对于想在顶层模块中调用输入信号,则不需要使用assign,直接在顶层模块中写入即可,不过需要对它进行引脚约束。
例:想要调用i_sentence
///二级模块
module compile(
input i_clk,
input nrst,
input i_sentence ,
output [47:0] o_sentence //input、output不声明类型的话,默认为wire型
);
///顶层模块
module TOP(
input i_clk,
input nrst,
input i_sentence, //可以在顶层模块中直接引入i_sentence,不过需要对它进行引脚约束
output o_A
);
compile compile_01(
.i_clk(clk_50m),
.nrst(nrst),
.i_sentence(i_sentence),
.o_sentence()
);
如果需要用逻辑分析仪仿真的话,可以在输出仿真变量中写入i_sentence。
如:
ila_0 ila_0_1(
.clk(clk_50m),
.probe0(i_sentence)
);