- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很简单的问题。给出以下代码:
module main(
output reg [1:0][DATA_WIDTH-1:0] dOut,
input wire [1:0][DATA_WIDTH-1:0] dIn,
input wire [1:0][ADDR_WIDTH-1:0] addr,
input wire [1:0] wren,
input wire clk
);
parameter DATA_WIDTH = 16;
parameter ADDR_WIDTH = 6;
reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0];
generate
genvar k;
for(k=0; k<2; k=k+1) begin: m
always @(posedge clk) begin
if(wren[k])
ram[addr[k]] <= dIn[k];
dOut[k] <= ram[addr[k]];
end
end
endgenerate
endmodule
quarus 13.0sp1 给出了这个错误(以及它的其他 20 个非兄弟同等的 sibling ):
Error (10028): Can't resolve multiple constant drivers for net "ram[63][14]" at main.v(42)
但是如果我手动展开生成循环:
module main(
output reg [1:0][DATA_WIDTH-1:0] dOut,
input wire [1:0][DATA_WIDTH-1:0] dIn,
input wire [1:0][ADDR_WIDTH-1:0] addr,
input wire [1:0] wren,
input wire clk
);
parameter DATA_WIDTH = 16;
parameter ADDR_WIDTH = 6;
reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0];
always @(posedge clk) begin
if(wren[0])
ram[addr[0]] <= dIn[0];
dOut[0] <= ram[addr[0]];
end
always @(posedge clk) begin
if(wren[1])
ram[addr[1]] <= dIn[1];
dOut[1] <= ram[addr[1]];
end
endmodule
通过分析和综合步骤,一切都会变得顺利。
让生成循环运行的解决方法是什么?
最佳答案
我认为正确的方法是在这个问题中解释的:Using a generate with for loop in verilog
这将被转移到您的代码中,如下所示:
module main(
output reg [1:0][DATA_WIDTH-1:0] dOut,
input wire [1:0][DATA_WIDTH-1:0] dIn,
input wire [1:0][ADDR_WIDTH-1:0] addr,
input wire [1:0] wren,
input wire clk
);
parameter DATA_WIDTH = 16;
parameter ADDR_WIDTH = 6;
reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0];
integer k;
always @(posedge clk) begin
for(k=0; k<2; k=k+1) begin:
if(wren[k])
ram[addr[k]] <= dIn[k];
dOut[k] <= ram[addr[k]];
end
end
endmodule
将对双端口 RAM 的所有访问保留在一个 always
block 中非常方便,这样合成器就可以安全地检测到您在寄存器 ram
处有效地使用双端口 RAM。
关于verilog - Quartus 不允许在 Verilog 中使用生成模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62155138/
我有很多 FPGA 项目和一些共享的通用组件。我正在寻找一种通过外部文件添加这些组件的方法,这样我就可以轻松地将新组件添加到我的所有项目中。 我已经搬走了 set_global_assignment
我正在尝试从命令行在 Linux (Kubuntu 12.04 LTS) 上使用 Quartus II 13.0 (Free Web Package) 从 Verilog RTL 生成 Verilog
我想在 Quartus 中运行一个仿真。所以我在“分配”菜单中分配了一个测试平台。我的测试平台包括我的 DUT(D) 和一个额外的组件 (E),它仅用于仿真(因此该组件包含不可合成的语句)。如果我从
我创建了一个实体,其中 quartus 成功识别了 RAM,并为它实例化了一个 RAM 宏功能。如果我可以从文件初始化那个 RAM,那就太好了。我找到了制作此类文件(.mif 文件)的教程。现在我已经
我们正在考虑将一些代码移动到 CPLD 或 FPGA 中以使其更快。我之前曾使用过 Xilinks 及其工具套件,但出于某种原因,我们决定这次使用 Altera,所以我正在努力适应 Quartus I
我正在使用 Altera Quartus 2 做一个定制的 8 位处理器,在我的笔记本电脑上编译需要很长时间。我只使用模拟并在原理图(框图)和 VHDL 中制作我的处理器。现在编译需要大约 10 分钟
在 Fedora 22 64 位中安装了带有 Modelsim 的 Quartus 13.0。在 32 位中运行 Quartus,因为否则我会遇到很多很多问题。不过,我可以启动 Quartus、创建项
很简单的问题。给出以下代码: module main( output reg [1:0][DATA_WIDTH-1:0] dOut, input wire [1:0][DATA_W
我有一个QuartusII中的FPGA设计,还有一个有一些闲置能力的持续集成服务器。 现在我想为我的 FPGA 设计构建一个测试套件,其中输入信号由专用组件生成,并根据预期行为检查输出信号。 有没有办
我正在尝试在 Xubuntu 14.04 64 位版本上安装 Quartus 13.1。下载的文件是一个 .run 安装程序,我通过执行以下命令使其可执行: sudo chmod +x install
在Altera Quartus ii 15.0软件中,Tools->Options->Preferred Text Editor选项卡,用于更改打开文件时的编辑器。 vim 有一个选项,命令行如下所示
我正在使用 Quartus Prime 精简版,我想像这样在 std_logic_vector 上使用一元运算符 nand library ieee; use ieee.std_logic_1164.
什么是 .rbf 文件,我如何从 Windows 上的 Quartus 输出文件 .sof 生成它们? 最佳答案 使用 Quartus II GUI 转到 File => Convert Progra
Fmax我的代码中的参数报告为:No Paths to report .因此,我试图使用 set_input_delay 设置与定义时钟的输入信号关系。 .但是,错误报告指出: Verilog HDL
我已经从http://www.vhdl.org/fphdl/下载了浮点软件包,并执行了以下操作: 我在项目中包含了math_utility_pkg.vhd,fixed_pkg_c.vhd和float_
我正在学习 verilog,当我只是查看 verilog 代码不知道电路如何工作时,我会转到 RTL 查看器查看数字逻辑。但是在这段代码中出现了一个奇怪的组件,我不知道这个组件是什么。是触发器、多路复
我在 Ubuntu 20.04 上安装了 Quartus Prime Lite 21.1,它运行良好。 我也有 ModelSim 20.1.1,它工作正常 我已经在 Quartus Prime 上设置
您好,我正在尝试使用锁相环来为 VGA Controller 生成时钟。我运气不好,决定制作自己的时钟,然后工作正常。我让 VGA Controller 工作。回到 PLL,尽管我仍然无法选择 PLL
是否有脚本可以通过 Quartus Programmer 在我的 FPGA 上使用 TCL 脚本上传 *.pof 文件? 最好是从命令行,因为我想将它集成到我的自定义软件中。 最佳答案 如果您只需要一
是否有脚本可以通过 Quartus Programmer 在我的 FPGA 上使用 TCL 脚本上传 *.pof 文件? 最好是从命令行,因为我想将它集成到我的自定义软件中。 最佳答案 如果您只需要一
我是一名优秀的程序员,十分优秀!