verilog 模块之间数据共享问题?--拜年啦
module bottom (
// input
input clk ,
input rst_n ,
// output
output wire data_out,
);
wire[255:0]
display_data1;
assign data_out =
display_data1 & 256'b1;
endmodule
module top (
// input
input clk ,
input rst_n ,
// output
output wire data_out,
);
wire[255:0]
display_data0;
bottom s( //如何讲display_data0 传递到底层,给display_data1使用
.clk(clk),
.rst_n(rst_n),
.data_out(data_out)
) ;
endmodule
不太明白你的意思?你是要例化吗》?
你把display_data1信号作为模块bottom的输入端口,然后top例化的时候将display_data0传递给它就行了。
这个问题
把你要传递的变量定义为输入/输出端口,例化两个模块的时候,把两个端口连起来就是了。
感觉小编的思想停留在C语言/c++上,verilog可综合的语法不存在调用的概念,而是数据传输/通信的概念,模块与模块之间的关系是通过接口联系起来的
你好?我传输的变量位数比较大200多bits,作为输入输出端口的话,编译器报错超出可用的引脚数量了?
模块间的连线不会消耗引脚吧?我还没见过因为模块的接口信号太多导致无法综合的……你也没有说清楚display_data0在bottom里到底有什么用。
大哥,你是内部模块连接,用wire变量就行了,又不是输出到芯片的IO口,怎么会占用引脚呢
Error: Can't place 98 pins with 3.3-V LVTTL I/O standard because Fitter has only 80 such free pins available for general purpose I/O placement。这是编译报告:用wire
Error: Can't place 98 pins with 3.3-V LVTTL I/O standard because Fitter has only 80 such free pins available for general purpose I/O placement。 像你说这样做,编译错误
你也没有说清楚display_data0在bottom里到底有什么用
的确是好论坛,要常来逛!的确是好论坛,要常来逛
的确是好论坛,要常来逛!的确是好论坛,要常来逛
天啦。看来你真得好好学学verilog的模块化设计了。
给你个模块与模块间传递变量的例子,有3个模块,第1个是大顶层top,它的输入和输出才是引脚,第2个是加法器m1,第3个是判决器m2,m1需要把加法结果送给m2进行判决,然后输出一个比较结果。看下面的代码:
顶层top:
module top
(
input [7:0] da1_i,
input [7:0] da2_i,
input [8:0] cmp,
output res
);
wire [8:0] da_o;
m1 u_m1(
.da1_i(da1_i),
.da2_i(da2_i),
.da_o(da_o),
);
m2 u_m2(
.dat_o(dat_o),
.cmp(cmp),
.res(res)
);
endmodule
加法器模块m1 :
module m1(
input [7:0] da1_i,
input [7:0] da2_i,
output wire [8:0] dat_o
);
assign dat_o = {1'b0,da1_i} + {1'b0,da2_i};
endmodule
比较器模块m2 :
module m2(
input [8:0] dat_o,
input [8:0] cmp,
output wire res
assign res = (dat_o >= cmp) ? 1'b1 : 1'b0;
);
endmodule
上面的代码里,top里有2个模块m1和m2,它们之间有个wire变量da_o[8:0]在传递,你认为这会导致引脚不够的报错吗? 自己好好想想吧
直接拉到输入输出接口上,在顶层例化 连接就可以了
用input
看看那 学洗一下
