小编ngu*_*rie的帖子

从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
查看次数

System Verilog中的++运算符是阻塞还是非阻塞?

良好的编码约定表明我们应该在组合块中使用阻塞分配,在顺序块中使用非阻塞分配.我想++在组合块中使用运算符,但我不知道它是否阻塞.这段代码也是如此:

input [3:0] some_bus;
logic [2:0] count_ones;
always_comb begin
  count_ones = '0;
  for(int i=0; i<4; i++) begin
    if(some_bus[i])
      count_ones++;
  end
end
Run Code Online (Sandbox Code Playgroud)

相当于:

input [3:0] some_bus;
logic [2:0] count_ones;
always_comb begin
  count_ones = '0;
  for(int i=0; i<4; i++) begin
    if(some_bus[i])
      count_ones = count_ones + 1;
  end
end
Run Code Online (Sandbox Code Playgroud)

或这个:

input [3:0] some_bus;
logic [2:0] count_ones;
always_comb begin
  count_ones = '0;
  for(int i=0; i<4; i++) begin
    if(some_bus[i])
      count_ones <= count_ones + 1;
  end
end
Run Code Online (Sandbox Code Playgroud)

我确实看过1800-2012标准,但无法弄明白.一个答案指出标准中适当的部分将不胜感激.

system-verilog

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

砌体可以用作RTL(从右到左)的方向

从LTR(从左到右)的文字方向,砌体工作得很好.现在我想用砖石与文字方向RTL(从右到左[中东语言,如希伯来语和阿拉伯语写主要是从右到左.]).

每当我在RTL(从右到左)文本方向上运行砌体时,砌体插件都会以LTR(从左到右)格式设置其所有网格布局.

我也从砌体插件的文档中查看,但没有找到任何与RTL(从右到左)方向相关的设置.

任何建议的解决方

html javascript css3 right-to-left jquery-masonry

9
推荐指数
3
解决办法
3542
查看次数

IntelliJ社区版中的右到左(希伯来语)支持

在IntelliJ社区版中是否有插件或从右到左书写的简单方法?也许是开发人员正在使用的黑客攻击?我正在写一个希伯来语的android应用程序,并且编写资源文件真的很难.

intellij-idea right-to-left

7
推荐指数
1
解决办法
1422
查看次数

在Delphi中复制带偏移量的内存

我想复制带偏移的内存块,是否可能?

这是我到目前为止的代码:

const
  SOURCE: array [0..5] of Byte = ($47, $49, $46, $38, $39, $61);
var
  Destination: Pointer;
begin
  // This is a full copy
  Move(SOURCE, Destination^, SizeOf(SOURCE));

  // If i want to copy from the third byte, is it possible?
  // I imagine the code should be, but it cannot be compiled.
  Move(Slice(SOURCE^, {Offset=}2)^, Destination^, SizeOf(SOURCE) - 2);
end;
Run Code Online (Sandbox Code Playgroud)

memory delphi copy

6
推荐指数
1
解决办法
4422
查看次数

Verilog:值与数组范围不匹配,模拟不匹配

据我所知,以下代码正确地进行了合成和模拟,但XST仍然发出以下警告: value(s) does not match array range, simulation mismatch.是否有我遗漏的东西?

使用的工具:Xilinx ISE项目导航器(合成器:XST)FPGA:SPARTAN 3E

module error_example(
    input [47:0] data,
    input [2:0] sel,
    output [5:0] data_out
);

   assign data_out = data[sel*6 +: 6];

endmodule
Run Code Online (Sandbox Code Playgroud)

WARNING:Xst:790 - "error_example.v" line 8: Index value(s) does not match array range, simulation mismatch.

就像我说的,这是有效的,我已经完成了数学运算:

sel 可以有0到7之间的值,

if sel为0,那么data_out = data[5:0] ......

如果sel是7,那么data_out = data[47:42]

我应该在这里做些不同的事吗?这是XST中的错误吗?

verilog hdl xilinx

6
推荐指数
1
解决办法
1049
查看次数

'{default:'1} 在系统 verilog 中应该做什么?

我有一个数组,我想将其初始化为全部 1。为此,我使用了以下代码片段:

logic [15:0] memory [8];
always_ff @(posedge clk or posedge reset) begin
   if(reset) begin
      memory <= '{default:'1};
   end
   else begin
      ...
   end  
end
Run Code Online (Sandbox Code Playgroud)

我的模拟器做了我认为正确的事情并将寄存器设置为16'hFFFF复位。但是,我的 lint 工具给了我一个警告,即位 0 具有异步设置,而位 1 到 15 具有异步重置。这意味着 linter 认为此代码分配16'h0001给寄存器。

由于这两个工具来自同一供应商,我提交了一个错误报告,因为它们不可能都是正确的。

问题是:根据规范,哪种行为是正确的?没有示例可以显示这种确切情况。第 5.7.1 节提到:

可以通过在单个位值前面加上撇号 ( ' ) 来指定未调整大小的单个位值,但不使用基数说明符。未定大小值的所有位都应设置为指定位的值。在自定上下文中,未定大小的单个位值应具有 1 位的宽度,并且该值应被视为无符号。

'0, '1, 'X, 'x, 'Z, 'z // 将所有位设置为指定值

如果这是一个“自定上下文”,那么答案是将 1 位符号扩展到 16'h0001,但如果不是,那么我猜想“将所有位设置为指定值”的示例适用。我不确定这是否是一个自我确定的上下文。

system-verilog

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

实数的格式规范

我想将一些实数打印到日志文件中。为了使它们易于阅读,我希望它们都具有相同的宽度。我知道这些数字的范围从 0 到 4095.75,所以我试过这个:

$display("expected= %4.2f, actual= %4.2f", expected, actual)
Run Code Online (Sandbox Code Playgroud)

我希望看到的是这样的:

expected=   12.25, actual=   12.75 
expected= 4093.25, actual= 4094.75 
Run Code Online (Sandbox Code Playgroud)

但我得到的是这样的:

expected= 12.25, actual= 12.75 
expected= 4093.25, actual= 4094.75 
Run Code Online (Sandbox Code Playgroud)

如何强制小数点上方值的宽度为 4 个字符?第21.2.1.3节LRM显示数据的大小在 %f 上是静默的。

verilog system-verilog

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

如何在FastcodeAddressPatch之后访问替换过程

我尝试用我自己的版本即时替换Delphi内置函数.

function ShortCutToTextOverride(ShortCut: TShortCut): string;
begin
  if SomeCondition then
    Result := Menus.ShortCutToText // after patching the pointer equals ShortCutToTextOverride
  else
  begin
    // My own code goes here
  end;
end;

FastcodeAddressPatch(@Menus.ShortCutToText, @ShortCutToTextOverride);
Run Code Online (Sandbox Code Playgroud)

修补后,无法再访问原始功能.无论如何都可以访问它?

delphi

3
推荐指数
1
解决办法
447
查看次数