在verilog中是否有特殊的开始和结束关键字,允许模拟继续运行,直到满足结束关键字?我明白这不会是可综合的; 但是,我只想将它用于测试目的.此外,verilog中的$ finish关键字退出modelsim.
我想使用vhdl的幂函数,其中幂是浮点数,数字是整数(将始终为“ 2”)。
2 ^一些浮点数。
我使用ieee库和(fixed_float_types.all,fixed_pkg.all和float_pkg.all)。
我曾想过计算所有可能的输出并将它们保存在ROM中,但我不知道功率范围。
如何实现此功能,以及是否有任何类似的实现功能在哪里可以找到?
谢谢
我有一个使用行为架构的 32 位桶形移位器。现在我需要将其转换为 n 位移位器。我面临的问题是 for 循环存在某种限制,我必须将常量作为标记值。
以下是我的代码
library IEEE;
use IEEE.std_logic_1164.all;
Entity bshift is -- barrel shifter
port (left : in std_logic; -- '1' for left, '0' for right
logical : in std_logic; -- '1' for logical, '0' for arithmetic
shift : in std_logic_vector(4 downto 0); -- shift count
input : in std_logic_vector (31 downto 0);
output : out std_logic_vector (31 downto 0) );
end entity bshift;
architecture behavior of bshift is
function to_integer(sig : std_logic_vector) return integer is …Run Code Online (Sandbox Code Playgroud) 我在 ModelSim 中收到以下错误:
错误:[..]/test1_toVectorAlignment_rtl.vhd(40):中缀表达式中有歧义类型;t_RAMXx8 或 ieee.std_logic_1164.STD_LOGIC_VECTOR。
ARCHITECTURE rtl OF test1_toVectorAlignment IS
type t_RAMXx8 is array (natural RANGE <>) of std_logic_vector(7 downto 0);
signal RAM28x8: t_RAMXx8(0 to 27);
BEGIN
...
currentIq<=unsigned(RAM28x8(5)(4 downto 0) & RAM28x8(4));
...
END rtl;
Run Code Online (Sandbox Code Playgroud)
实体声明:
ENTITY test1_toVectorAlignment IS
...
currentIq: out unsigned(12 downto 0);
...
END test1_toVectorAlignment;
Run Code Online (Sandbox Code Playgroud)
有人可以用这些信息告诉我如何解决这个问题吗?
我正在尝试在 ModelSim 中运行测试模拟,但标题中出现错误。我已经仔细检查过,该文件与我的项目位于同一位置,并且名称匹配得很好。有谁知道问题可能是什么?如果您需要查看代码的某些部分或类似内容,请告诉我。
假设一个实体定义了两个体系结构。这两种架构使用相同的实体(显然),随后两者将输出引脚设置为不同的值。我的问题是,程序(模拟器)如何确定输出应该是什么(即选择哪种架构)?
下面是一个例子:
library ieee;
use ieee.std_logic_1164.all;
entity Exercise_4 is
generic (n : integer := 4);
port(
a, b : std_logic_vector (n-1 downto 0);
clk, rst : std_logic;
q, qn : buffer std_logic_vector (n-1 downto 0));
end;
architecture one of Exercise_4 is
begin
process (clk, rst)
begin
if rst = '0' then
q <= (others=>'0');
elsif (clk' event and clk = '0') then
q <= a ;
end if;
end process;
process (clk, rst)
begin
if rst = '0' then
qn …Run Code Online (Sandbox Code Playgroud) 我有一个VHDL包,它定义了一个函数(前向声明)和一个常量.常量的值由该函数计算,该函数的主体位于包体中.
截至目前,ModelSim/QuestaSim是唯一不喜欢此代码的工具.它需要2个包,因此在常量声明之前解析了主体.
package test is
function mytest(param : boolean ) return boolean;
constant value : boolean := mytest(TRUE);
end package;
package body test is
function mytest(param : boolean ) return boolean is
begin
return not param;
end function;
end package body;
Run Code Online (Sandbox Code Playgroud)
这在VHDL和其他工具中是不允许使用宽松的解析规则,还是ModelSim问题?
我想使用多年前使用PLI 1.0开发的PLI例程.之前工作得很好.但是当我尝试使用较新版本的ModelSim Verilog模拟器运行时,我收到以下错误消息:
#**警告:(vsim-8668)IEEE已弃用tf_nodeinfo.虽然仍然部分支持,但memoryval_p将始终设置为空指针.
#:PDK_top.v(102)
由于PLI例程使用tf_nodeinfo并且模拟失败.我试图弄清楚如何修复这个问题,但我找不到任何推荐的方法来替换过时的tf_nodeinfo.
任何人都可以给我一个我应该用来应对这种情况的策略吗?PLI例程的所有源代码都可用.
另外,我很好奇为什么IEEE决定放弃tf_nodeinfo.
在一些测试平台代码中,我使用一个过程来处理信号。然后我在不同的信号上按顺序多次使用这个程序。只要我明确定义信号,这就可以正常工作;一旦我在循环中索引信号,它就会失败
(vcom-1450) 正式“s”的实际(索引名称)不是静态信号名称。
为什么这是不可能的,我该如何解决?可能我可以将它移动到 a for ... generate,但是我想do_something以一个很好定义的顺序被调用。
library ieee;
use ieee.std_logic_1164.all;
entity test is
end test;
architecture tb of test is
signal foo : std_logic_vector(1 downto 0);
begin
dummy: process is
procedure do_something (
signal s : out std_logic
) is begin
s <= '1';
report "tic";
wait for 1 ns;
-- actually we would do something more interesting here
s <= '0';
report "toc";
end procedure;
begin
-- This works well, but requires manual loop-unrolling …Run Code Online (Sandbox Code Playgroud) 我有一个 modelsim 项目文件 (*.mpf),其中列出了所有 HDL 文件,并为每个文件提供了“compile_order”。因此,当我加载 (.mpf) 文件时,我可以看到每个 HDL 文件旁边都有一个 compoile_order 编号。到目前为止,一切都很好。
现在,在 GUI 上,我可以运行“compile all”,它将按正确的顺序编译我的所有文件,因为顺序已经预先确定。
我想知道相当于GUI中“编译全部”的tcl命令行是什么?
换句话说,我希望能够键入命令并编译所有文件,而不是通过 GUI“编译所有”。