【发布时间】:2019-12-10 09:53:53
【问题描述】:
这会为参数syn 的所有值生成单个位输出。为什么syn>0 没有产生 2 位输出
module test
(clk,
rst_n,
en,
rst_n2,
in,
out
);
parameter syn=0;
generate if(syn>0)begin
`define ROMS
end endgenerate
input clk;
input rst_n;
input en;
input rst_n2;
`ifdef ROMS
input in;
output reg out;
`endif
`ifndef ROMS
input [1:0] in;
output reg [1:0] out;
`endif
always_ff@(posedge clk or negedge rst_n or negedge en) begin
if(~rst_n) begin
out <= 0;
end else if(clk) begin
out <= 0;
end else if(rst_n2 == 1'b0)begin
out <= 0;
end else begin
out <= in;
end
end
endmodule
【问题讨论】:
-
欢迎来到 Stackoverflow。请对您的代码提供更多解释,以便其他人能够理解。
-
是的,为什么关闭?我完全理解这个问题(尽管在@octobus 编辑它之前它被格式错误)
-
@Oldfart 投票重新开放怎么样?
-
@octobus 感谢格式化我的代码。我的问题与参数 syn 值无关,`ifdef ROMS 正在编译,但正如 Matthew 回答的那样,编译器指令在编译代码之前被评估,因此始终定义 ROMS。
-
在这种特殊情况下,您仅确定位宽为
in和out,因此您可以使用module test #(parameter WIDTH=1) (input clk, rst_in, en, rst_n2, input [WIDTH-1:0] in, output reg [WIDTH-1:0] out);(ANSI 样式标头)。另请注意,您的clk不是用作时钟,而是用作异步重置。而negedge en开始被视为同步时钟。