问题标签 [register-transfer-level]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
288 浏览

verilog - RTL Verilog (FPGA) 可综合代码的时钟转换

将 FPGA 上的 12 MHz 系统时钟信号转换为 50% 占空比的 1 MHz 信号输出。

我知道我需要在 50/50 占空比下除以 2 以获得 6 MHz,然后再除以 2 以达到 3 MHz,然后除以 3 以达到 1 MHz。这是正确的方法吗?

另外,我将如何在 RTL Verilog 代码中实现这一点?

0 投票
1 回答
131 浏览

verilog - Verilog RTL:将数字数据写入预定义的内存“地址”

我有 [8:0] 数字数据输入。我想预先定义这些值并将它们存储在一个唯一的地址中,以便稍后在我的逻辑中通过调用它们的地址值来访问它们。

不完全确定,我正在做这样的事情(另外,这是针对 Verilog RTL(可合成):

我不确定,这只是我头顶上的事情。

0 投票
1 回答
198 浏览

vhdl - 不支持的属性错误

我编写了一个 VHDL 函数vectorize()来将 std_logic_vector 数组(slv_1d_array_type在我的代码中输入)转换为 std_logic_vector。

Vivado 2018.2[Synth 8-5882] found unsupported attribute ["test_top.vhd":41]使用以下示例生成此错误。我已将 Vivado 配置为使用 VHDL-2008。

如何使这些'length属性起作用以避免传递数组大小?

0 投票
1 回答
210 浏览

verilog - 如何在时钟周期上升沿之前将信号设置为高 X 时间?

我有一个信号来检查内存块中的数据是否可用并执行一些计算/逻辑(这是无关紧要的)。

我希望一个名为“START_SIG”的信号在 10 MHz 频率的时钟周期的第一个上升沿之前达到高 X 时间(纳秒)。仅当它检测到有可用数据并根据需要进行进一步计算时,它才会变高。

现在,如何做到这一点?另外,我不能设置延迟,因为这必须是 RTL Verilog。因此,它必须可以在 FPGA(Artix7 系列)上进行综合。

有什么建议么?

0 投票
1 回答
307 浏览

chisel - 在凿子中将参数传递给验证器后端

我用凿子写了一个简单的 PeekPokeTester 测试台,它使用 verilator 后端编译并成功运行。
但现在我想将一些标志传递给验证器后端。在驱动程序选项中有一个“--more-vcs-flags”选项,但verilator没有类似的东西。有什么方法可以更改验证器标志或 CFLAGS 吗?更具体地说,我想在凿子中将 xilinx 原语模拟为黑盒,我必须在 verilator 编译命令中添加类似“-y $VIVADO_INSTALL_DIR/data/verilog/src/unisims”的内容,
谢谢

0 投票
2 回答
65 浏览

verilog - 我正在尝试以下列方式为我提供向上计数的计数器?

我正在尝试制作一个取决于信号的计数器。信号在两个周期内为高电平,在接下来的两个周期内为低电平,并且一​​直持续到结束。在高脉冲期间,计数应从 0、1 开始。当脉冲为低电平时,计数为'x,从下一个高电平开始,它从 2、3 开始,然后再次为 'x 两个周期(仅在脉冲为高电平时向上计数),然后再次为 4、5。我是 Verilog 的新手,这是一个任务。

当我编写以下代码时,我总是得到计数 1 2 x 1 2 x。有什么帮助吗?

我得到 1 2 x x1 2 xx 而不是。1 2 xx 3 4 xx 5 6 xx 等。任何帮助表示赞赏。

0 投票
1 回答
1230 浏览

verilog - 我可以在verilog中的数组和位之间使用布尔值和运算吗

我有一个输入,它是 4 位,定义为:输入 [3:0] in;

另一个输入说启用,它是 1 位,定义为:输入启用;并且一条线被定义为:wire [3:0] out_int;

我想得到它们的布尔AND运算:

out_int[3:0] = in[3:0] && 启用;

我无法获得所需的输出,我想要建模的是,如果 enable hv 为 1 或 0 out_int (all 4 bits) 应等于 in (all 4 bits) ,并且当 enable 为 X 或 Z 时全部为 4 out_int 的位应该是 4'bx。

0 投票
1 回答
63 浏览

verilog - 模拟中阵列移位器的不同行为

我正在尝试在我的设计中调试一个非常奇怪的行为。我正在调试以下 Systemverilog 代码:

上面的代码是更大设计的一部分,但由于我将错误范围缩小到上述电路,我没有添加整个设计。我对上述代码的预期行为是输入延迟ARRAY_SIZE-1次。我有一个简单的测试平台,可以验证通过的预期行为。当我在更大的设计中使用这个模块时,问题就开始了。一般来说,唯一的区别是x_in是从 RAM 中读取的。当我比较这两个波形时(一个是上面的代码是 DUT,另一个是当我在更大的设计中使用它时)我看到x_in在这两种情况下的行为都符合预期,这意味着它恰好在我预期的时候到达。但是由于某种原因,以下行的行为有所不同:

在我单独测试ff_array的情况下, x_in值恰好在时钟的同一个 pos 边缘移入sh_in[0] ,但是,当我在从 RAM 读取x_in的更大设计中使用它时, x_in被移位到sh_in[0]一个时钟周期,而不是在同一个时钟上。我真的不知道原因。我正在使用 xsim v2018.2(64 位)。

0 投票
1 回答
701 浏览

verilog - 将数组作为参数传递给 SystemVerilog Xilinx 中的模块

我已经声明了以下 systemverilog 模块:

我正在使用 Vivado 2018.2 对此模块进行功能测试。我将测试台中的以下数组传递给 module_top:

当我查看波形时,module_1 的所有实例化都得到了正确的 y_in 切片 excpet module_1_inst_2。对我来说,我在 module_1_inst_2 中得到了 y_in 的 Z。例如,如果我运行模拟,因为我在时钟的每个 pos 边缘打印 y_in 值,我得到以下信息:

但是,如果我将此打印移动到层次结构的上一级(module_top),则 y_in 具有正确的所有值。当我检查波形时,我得到了同样的观察结果。

另一方面,如果我将 y_in 宽度从 6 位更改为 7 位,它会起作用!所以我猜 Xilinx 不能正确支持模块的 passign 数组?还是我做错了什么?

0 投票
1 回答
512 浏览

verilog - 如何删除不需要的输出?

我正在研究一个非常大的模块,其中这个乘法器和加法器模块只是一小部分,但它会帮助我在这里表达我的问题。

RTL 代码:

结核病代码:

输出:Cadence SimVision

Cadence SimVision 的输出

用红色矩形标记的数据是我想要删除的不需要的数据,因为当我多次使用这个模块时,在正确的数据之前有很多不需要的数据。因此,当我必须整理数据以绘制图表时,需要经历很多事情。

有什么我不知道的魔术技巧来摆脱不需要的数据?

另外,如果您有更好的优化想法或任何批评,请随时分享。