小编Rus*_*ell的帖子

等到VHDL仿真中<signal> = 1永远不会成立

下面是我正在运行的代码.我的问题是为什么wait until在modelsim 中没有第三个触发器?控制台输出很简单GOT HERE.它从来没有上线GOT HERE 2.我认为wait until <SIGNAL> = 1连续两次相同会很好,因为两次都是正确的.我没有在那里添加'事件,所以我不认为模拟器需要看到边缘.谁能解释这种行为?

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity example_wait_failure is
end example_wait_failure;

architecture behave of example_wait_failure is

  signal r_CLK_TB : std_logic := '0';

begin

  r_CLK_TB <= '1' after 20 ns, '0' after 40 ns, '1' after 60 ns;


  p_TEST : process
  begin

    wait until r_CLK_TB = '1';
    report "GOT HERE" severity note;

    wait until r_CLK_TB = '1';
    wait until r_CLK_TB = '1';
    report …
Run Code Online (Sandbox Code Playgroud)

fpga vhdl modelsim

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

弱“H”,模拟中的输入双向信号上拉

有没有办法告诉模拟器(我正在使用 Modelsim)将信号拉到弱的“H”,当它不是由任一双向接口驱动时?

例如,如果我有一个 I2C 信号 I2C_SDA,它被声明为 2 个模块的输入输出。一个是我的实际 UUT,另一个是测试台。两者都有这样的声明:

io_i2c_sda <= r_I2C_DATA when r_I2C_DATA_EN = '1' else 'Z'; 
Run Code Online (Sandbox Code Playgroud)

所以两端都是三态的。这在模拟中工作正常,除了线路一直是蓝色('Z'),两端都没有传输。当两端都没有传输时,如何将这条线拉到代码中的“H”?

vhdl modelsim

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

VHDL中的整数超出范围时会发生什么?

假设您有一个定义如下的信号:

signal test_count : integer range 0 to 11;
Run Code Online (Sandbox Code Playgroud)

现在,如果在模拟中test_count小于0或大于11,将导致模拟立即崩溃。我想知道的是,将其合成后会发生什么?如果test_count增加到11以上或减少到0以下,会发生什么情况?综合工具会迫使信号回绕吗?请注意,我选择了一个示例,该示例不能轻易地返回到0000。

synthesis vhdl

5
推荐指数
1
解决办法
5928
查看次数

将字节数组插入字节数组 Python

我试图在开始时将一个字节数组插入另一个数组。这是我正在尝试完成的一个简单示例。

import struct
a = bytearray(struct.pack(">i", 1))
b = bytearray(struct.pack(">i", 2))
a = a.insert(0, b)
print(a)
Run Code Online (Sandbox Code Playgroud)

但是,这失败并出现以下错误:

a = a.insert(0, b) TypeError: an integer is required

python insert

5
推荐指数
1
解决办法
8772
查看次数

将Verilog中的二进制文件数据读入2D数组

我有一个要从二进制文件加载的数组:

parameter c_ROWS = 8;
parameter c_COLS = 16;
reg [15:0]  r_Image_Raw[0:c_ROWS-1][0:c_COLS-1];
Run Code Online (Sandbox Code Playgroud)

我的输入文件是二进制数据,256 字节长(与 r_Image_Raw 相同的总空间)。我尝试使用$fread来完成此操作,但它仅适用于最后一行的第四列:

n_File_ID = $fopen(s_File_Name, "r");
n_Temp = $fread(r_Image_Raw, n_File_ID);
Run Code Online (Sandbox Code Playgroud)

我也尝试使用$fscanf此方法,但在打开综合工具时出现有关打包类型的错误:

while (!$feof(n_File_ID))
  n_Temp = $fscanf(n_File_ID, "%h", r_Image_Raw);
Run Code Online (Sandbox Code Playgroud)

我感觉这应该很容易做到。我是否创建了一个 2D for 循环并循环遍历 r_Image_Raw 变量,一次读取 16 位?我感觉事情不应该那么复杂。

verilog system-verilog

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

VHDL是在Generic中使用字符串的有效语法吗?

我已经使用Xilinx工具一段时间了,它们完全可以使用以下代码:

ENTITY Example IS
  GENERIC(
    g_Mode : STRING  := "Normal"); -- "Normal", "Test"
  PORT(
    Clk : IN  STD_LOGIC;
    -- ETC 
    );

END Example;

ARCHITECTURE rtl OF Example IS

Normal_g : IF g_Mode = "Normal" GENERATE
  -- Normal Operation Code Here
END GENERATE Normal_g;

Test_g : IF g_Mode = "Test" GENERATE
  -- Test Operation Code Here
END GENERATE Test_g;
Run Code Online (Sandbox Code Playgroud)

但是我最近切换到使用莱迪思工具,第二次检查g_Mode时出现错误.错误是,"不等长度数组之间的比较总是返回FALSE".所以似乎两个生成语句中的一个永远不会执行.我的问题是,这是合法的VHDL语法,因此莱迪思工具存在问题吗?或者我的代码样式是否应该更改为不使用字符串作为泛型?

vhdl

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

从VHDL转换为Verilog,具体案例

我习惯于使用 VHDL 进行编程,并且想知道在 Verilog 中执行 VHDL 中使用的某些类型操作的“最佳”方法。我认为每个问题都可以是他们自己的专用问题,但我认为最好能收集这些问题,以便人们在一个地方看到一堆 Verilog 示例,而不是分散在 5 个问题中。谢谢。

以下是我希望看到最佳实践的一些示例:

替换其他人:

我知道对于 Verilog 中的信号分配,您可以执行以下操作:

data <= 'b0;
Run Code Online (Sandbox Code Playgroud)

这会将数据中的所有位分配为零,并且如果数据更改其宽度,它仍然有效。绝妙的技巧,但是当实例化模块并将输入绑定为零时呢?例如

   Data_Module UUT
      (
       .Data(8'h00),  //'b0 doesn't work here
Run Code Online (Sandbox Code Playgroud)

属性替换:

编写灵活的代码很好,所以我喜欢根据泛型定义端口宽度,这样如果端口宽度发生变化,只需快速更新泛型,一切仍然有效。我经常有这样的VHDL代码:

signal some_data : std_logic_vector(g_DATA_WIDTH+g_GENERIC-1 downto 0);
signal some2     : std_logic_vector(some_data'length-1 downto 0);

-- OR I may have this:
left_bit <= some_data'left;
Run Code Online (Sandbox Code Playgroud)

长的when/else链:

这给我带来了麻烦。设置组合的always块并在索引上使用case语句是最好的方法吗?这看起来有很多代码。使用?运算符可能会导致一些难以辨认的代码,因此我不喜欢在较长的 if/else 链中这样做。

some_data <= X"01" when index = 0 else
             X"04" when index = 1 else
             X"02" when index = 2 else
             X"F0";
Run Code Online (Sandbox Code Playgroud)

断言:

如何在 …

verilog vhdl

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

在Verilog程序中使用连续赋值?

在Verilog程序中使用连续赋值是否可能和/或有用?例如,是否有任何理由放置assign一个always块?

例如这段代码:

always @(*) 
begin 
  assign data_in = Data;
end
Run Code Online (Sandbox Code Playgroud)

此外,用这种方法生成顺序逻辑是否可能?

always @(posedge clk) 
begin 
  assign data_in = Data;
end
Run Code Online (Sandbox Code Playgroud)

verilog fpga system-verilog

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

在Emacs Verilog模式下对齐代码?

我习惯在emacs中用VHDL编写代码,它具有很好的美化功能,可以对齐信号分配。Verilog模式有类似的东西吗?

转换为:

r_Tx_Done <= 1'b1;
r_Clock_Count <= 0;
if (r_Done == 1'b1)
  begin
    r_SM_Main <= s_CLEANUP;
    o_Tx_Active <= 1'b0;
  end
Run Code Online (Sandbox Code Playgroud)

为此:

r_Tx_Done     <= 1'b1;
r_Clock_Count <= 0;
if (r_Done == 1'b1)
  begin
    r_SM_Main   <= s_CLEANUP;
    o_Tx_Active <= 1'b0;
  end
Run Code Online (Sandbox Code Playgroud)

Verilog模式在保持if else begin end对齐状态方面做得很好,但是并不能像我想要的那样对齐分配。请注意,if语句内部与if语句<=外部不对齐。本质上,我希望每个开始/结束块都分开处理。

emacs verilog

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

自定义类型为 VHDL 2008 通用

generic我想在使用 VHDL-2008的部分中创建自定义类型entity。但是我在 Modelsim 中使用此代码立即收到错误。错误是:

** 错误:C:/Projects/source/My_Mux.vhd(35):靠近“is”:期待“;” 或者 ')'

请注意,第 35 行如下type t_Array

entity My_Mux is
  generic (
    g_MUX_INPUTS : integer := 2;
    type t_Array is array (0 to g_MUX_INPUTS-1) of std_logic_vector(7 downto 0)
    );
  port (
    i_Select   : in std_logic_vector(1 downto 0);
    i_Mux_Data : in t_Array;
    o_Data     : out std_logic_vector(7 downto 0)
    );
end entity My_Mux;

architecture RTL of My_Mux is

begin

  o_Data <= i_Mux_Data(0) when i_Select = "00" else i_Mux_Data(1);

end architecture RTL;
Run Code Online (Sandbox Code Playgroud)

我考虑创建一个在代码的通用部分中定义的特殊函数。但这需要我重载实例化模块中的函数,我真的不想这样做,这似乎不必要地复杂。如果我可以在泛型中创建自定义类型,它将解决我的问题。可以使用VHDL-2008吗?

vhdl

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

如何在Verilog中的许多文件之间共享常量?

我在Verilog中使用一个简单的UART,它是ASCII值的某些定义的一部分。例如:

parameter ASCII_a  = 8'h61;
parameter ASCII_b  = 8'h62;
parameter ASCII_c  = 8'h63;
parameter ASCII_d  = 8'h64;
parameter ASCII_e  = 8'h65;
parameter ASCII_f  = 8'h66;
Run Code Online (Sandbox Code Playgroud)

等。我试图找到最好的方法来创建这些参数一次,然后在多个文件中访问它们。当您可以创建一个程序包并在需要的地方包含该程序包时,我就习惯了VHDL。我知道Verilog可以使用该include指令,但是我相信我需要将其括起来ifdefs

我只想创建一个SystemVerilog程序包,但我不想处理供应商工具之间的综合兼容性问题。(我知道Microsemi有点奇怪,您可以在其中包含SV文件,但是它们必须以.v结尾)。

对于您的长期Verilog编码人员,首选的方法是什么?

verilog fpga

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

标签 统计

vhdl ×6

verilog ×5

fpga ×3

modelsim ×2

system-verilog ×2

emacs ×1

insert ×1

python ×1

synthesis ×1