标签: verilog

我们可以拥有一系列自定义模块吗?

我们可以为自定义模块提供一组实例吗?

例如:我们可以input [15:0] a;- 这会创建一个总线.我们可以为自定义模块做同样的事情,即DFF [15:0] d;DFF是自定义模块吗?在这里,我打算创建16个DFF模块实例.

verilog

10
推荐指数
2
解决办法
2万
查看次数

处理SystemVerilog包中的参数化

SystemVerilog添加了包以提供公共代码段(函数,类型,常量等)的命名空间.但由于软件包未实例化,因此无法对其进行参数化,因此处理参数化成员是有问题的.在实践中,我发现这是非常有限的,因为我的自定义类型通常有一些参数指示字段宽度等.

我通常通过使用带有默认值的参数处理这个问题,并且只是理解我需要返回更改某些应用程序的包源代码,这对我来说似乎非常错误.但我还没有找到一种方法来更清洁地处理这个问题.例如:

package my_pkg;
    parameter ADDR_MSB = 7;
    parameter DATA_MSB = 31;

    typedef struct {
        logic [ADDR_MSB:0] address;
        logic [DATA_MSB:0] data;
    } simple_struct_t;

endpackage
Run Code Online (Sandbox Code Playgroud)

有没有人找到一个更清洁的方式处理这个?我很乐意听到它,因为我认为软件包是SV的一个非常强大的补充,可以实现更安全的代码重用,但这种限制非常严重.

verilog system-verilog

10
推荐指数
2
解决办法
1万
查看次数

快速,小面积和低延迟的部分排序算法

我正在寻找一个快速的方式做81号的部分排序 - 理想的情况下我期待提取最低16个值(它不是必需的16是在绝对正确的顺序).

这样做的目标是在FPGA专用硬件 - 所以这个稍微复杂的问题,因为我想要的结果执行的面积尽可能小.我看了看,并实施了奇偶合并排序算法,但我的理想在寻找什么,可能是我的需求更有效的(贸易算法实现大小的部分排序,以便给予最低16,不一定而不是一个完整的)

任何建议都会非常受欢迎

非常感谢

sorting algorithm verilog fpga vhdl

10
推荐指数
2
解决办法
3434
查看次数

从testbench访问uvm_config_db的最佳方法是什么?

我想在我的顶级测试平台中创建一个时钟,其周期可以从测试中控制.我所做的是将句点设置为uvm_config_db并将其恢复到测试平台中.我必须输入#1以确保构建阶段已完成,否则get返回错误的值:

module testbench_top;
  int clk_period;

  bit clk = 0;

  initial begin
    #1;    
    void'(uvm_config_db #(int) ::get(null, "uvm_test_top.env", "clk_period", clk_period));
    // Create clk
    forever begin
      #(clk_period/2) clk = !clk;
    end
  end
Run Code Online (Sandbox Code Playgroud)

我被#1烦恼了.有没有更好的方法来检查配置是否已设置?我可以以某种方式阻止直到start_of_simulation_phase?

verilog system-verilog uvm

10
推荐指数
1
解决办法
6186
查看次数

在综合中应避免使用SystemVerilog的功能?

SystemVerilog引入了一些非常有用的结构来改进编码风格.然而,正如我的一位同事总是说:"你不是在编写软件,而是在描述硬件." 考虑到这一点,当需要合成最终结果时,应该避免使用哪种语言特性?该论文显示了功能目前由Synopsys的工具合成的,但为了安全起见,我认为应该只使用由所有主要厂商的综合的功能.另外,什么结构会在网表中产生奇怪的结果,这在ECO中很难遵循?

总结:我喜欢紧凑且易于维护的代码,但如果它在后端引起问题则不行.我应该避免什么?

编辑:为了回应关闭投票,我想尝试使其更具体一点.这个问题的灵感来自于这个答案.我很喜欢使用'糖',因为Dave称之为降低代码复杂性,但是如果某些综合工具会破坏信号名称并使结果难以处理,那就不行了.我正在寻找更多这样的例子.

verilog system-verilog

10
推荐指数
1
解决办法
6968
查看次数

如何在RTL中使用时钟门控?

我在我的设计中为时钟控制了一些锁存和逻辑.我在合成和布局方面没有太多经验.在RTL中实现时钟门控的正确方法是什么?

例1:

always_comb begin
    gated_clk  = clk & latch_update_en;
end

always_latch begin
    if(gated_clk) begin
         latch_data <= new_data;
    end
end
Run Code Online (Sandbox Code Playgroud)

例2:在对RTL时钟门控的良好实践进行一些研究时,我偶然发现了一个RTL示例.该示例实现了上面的代码:

clock_gator cg_cell (.clk(clk), .en(latch_update_en), .scan_en(scan_en_in), .gated_clk(gated_clk));

always_latch begin
    if(gated_clk) begin
         latch_data <= new_data;
    end
end
Run Code Online (Sandbox Code Playgroud)

使用自定义时钟门控单元的目的是什么?如果clk在带有另一个使能信号的always_comb块中直接"和"处理,那么该工具是否在合成中有困难时间?我感觉使用特殊时钟门控单元是生成门控时钟信号的标准方法.我试图理解为什么会这样.

verilog register-transfer-level system-verilog vlsi

10
推荐指数
1
解决办法
2万
查看次数

在Verilog中可以合成$ readmem吗?

我正在尝试在FPGA上实现一个微控制器,我需要为它的程序提供一个ROM.如果我使用$ readmemb,那么它会被正确地合成到ROM吗?如果没有,这样做的标准方法是什么?

verilog synthesis

9
推荐指数
1
解决办法
1万
查看次数

Verilog中的对数

我在verilog中看到一个声明integer level = log(N)(其中N是一个参数,级别是确定的)但是我知道我不能在verilog中做复杂的数学语句,所以我想知道是否有上述问题的替代解决方案?

任何反馈意见!

verilog logarithm

9
推荐指数
2
解决办法
2万
查看次数

什么是判断总线是否包含单个x verilog的最佳方法?

我有一个监控公交车的测试台.总线内的一些信号可以是1'bx.由于各种原因,我需要知道总线内的任何信号是否为1'bx.如果总线包含任何x,那么测试的最佳方法是什么(不是用于综合 - 仅用于模拟目的)?我原本希望我可以使用减少或然后使用===,但这似乎不起作用.谢谢,

d

verilog

9
推荐指数
2
解决办法
1万
查看次数

在Verilog中分配值:assign,<=和=之间的差异

我刚刚开始学习Verilog,我从不同的来源看到了这三行.我对这三者之间的区别感到困惑:

  1. c <= a&b;
  2. 分配c = ~a;
  3. c = 1'b0;

这些线似乎为c赋值,但有什么区别?谢谢.

verilog assign

9
推荐指数
1
解决办法
1万
查看次数