我试图减少我的vhdl代码中的逻辑元素的数量.我正在使用quartus II来编程Altera DE2 FPGA.有人可以就我如何做到这一点给出一些建议吗?
谢谢
我有一个很大的设计,包括测试平台,一些测试电路和被测电路本身.我使用modelsim来模拟设计,我希望有一个模拟转储.我被建议使用以下命令生成转储:
vcd file myvcd1.vcd
vcd add -r /sim_minimips/*
Run Code Online (Sandbox Code Playgroud)
它接缝工作,但我想要的是只为被测电路生成转储.
我试图使用相同的命令来指定我想要考虑的文件的名称:
vcd file myvcd2.vcd
vcd add -r /minimips/*
Run Code Online (Sandbox Code Playgroud)
但是生成了以下错误:
Error vsim 3561 No object matching minimips
Run Code Online (Sandbox Code Playgroud)
我不明白错误,我不确定即使这是隔离子部分的正确程序.
有谁知道怎么做或知道我在哪里可以得到一个关于这个价值变化转储的体面的简单教程?
我附上我的测试台实体:
library IEEE;
use IEEE.std_logic_1164.all;
library std;
use std.textio.all;
library work;
use work.pack_mips.all;
entity sim_minimips is
end;
architecture bench of sim_minimips is
component minimips is
port (
clock : in std_logic;
reset : in std_logic;
ram_req : out std_logic;
ram_adr : out bus32;
ram_r_w : out std_logic;
ram_data : inout bus32;
ram_ack : …Run Code Online (Sandbox Code Playgroud) 我用VHDL制作了一个双端口寄存器库,我想测试它以确保它有效.我该怎么做呢?我知道我想做什么(将寄存器2设置为常量,在测试程序中读出它,写入寄存器3并将其读回,看看我是否有相同的结果).
唯一的问题是,我是VHDL的新手,所以我不知道是否有控制台或测试程序是如何构建的,或者如何实例化寄存器文件,甚至是编译它的内容(我一直在使用quartus)至今).
这是我的注册文件:
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
-- Register File
entity RF is
port(
signal clk, we: in std_logic;
signal ImmediateValue : in std_logic_vector(15 downto 0);
signal RegisterSelectA, RegisterSelectB : in integer range 0 to 15;
signal AOut, BOut : out std_logic_vector(15 downto 0)
);
end RF
architecture behavior of RF is
array std_logic_vector_field is array(15 downto 0) of std_logic_vector(15 downto 0);
variable registers : std_logic_vector(15 downto 0);
process (clk, we, RegisterSelectA, RegisterSelectB, ImmediateValue)
wait until clk'event and clk = …Run Code Online (Sandbox Code Playgroud) 尝试在VHDL中将组件连接到父层次结构的两个输出端口时遇到问题.由于物理连接只能通过"端口映射"语句完成,因此无法将本地信号连接到多个输出端口.这是一个例子:

上述电路的描述应该是smth.像这样:
entity HIER is
port (
IN1 : in bit;
OUT1, OUT2 : out bit);
end hier;
architecture HIER_IMPL of HIER is
component BUF is
port (a : in bit; o : out bit);
end component;
begin
BUF1 : BUF port map (a => IN1, o => OUT1, o => OUT2);
end HIER_IMPL;
Run Code Online (Sandbox Code Playgroud)
但是,输出端口"o"与OUT1和OUT2的双重分配将不起作用,因为它在VHDL中是禁止的.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Lab3_Adder1 is
Port ( cin : in STD_LOGIC;
a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC_VECTOR (3 downto 0);
s : out STD_LOGIC_VECTOR (3 downto 0);
cout : out STD_LOGIC);
end Lab3_Adder1;
architecture Behavioral of Lab3_Adder1 is
SIGNAL c : STD_LOGIC_VECTOR (4 DOWNTO 0);
begin
c(0) <= cin;
s <= a XOR b XOR c (3 DOWNTO 0);
c (4 DOWNTO 1) <= (a AND b) OR (a AND c(3 DOWNTO 0)) …Run Code Online (Sandbox Code Playgroud) 我有两个设计:
library ieee;
use ieee.std_logic_1164.all;
entity eq_test1 is
port (a,b : IN std_logic_vector (1 downto 0);
o : OUT std_logic);
end eq_test1;
architecture strange_behavior of eq_test1 is
begin
P: process (a,b)
begin
if a = b then o <= '1';
else o <= '0';
end if;
end process P;
end strange_behavior;
Run Code Online (Sandbox Code Playgroud)
强制在Modelsim中具有"00"并且b具有"0L"表示o变为"0".因此L不被解释为0,"00"="0L"为假.好.
但是当我采用相同的设计并添加时
use ieee.std_logic_unsigned.all;
Run Code Online (Sandbox Code Playgroud)
到列表中,行为是不同的.然后"00"="0L"返回true,因此L IS与0相同(0变为"1").包含未签名的包,即使"0X"="0Z"也返回true.
有谁能解释为什么?
我知道'HIGH它是一个数据属性,它返回上面的数组索引,但是向量外面的括号我得不到它.它和vector'HIGH一样?
告诉我,如果有人需要更多信息或其他东西
我目前正在尝试使用VHDL设计交通灯控制器,我正在Altera EPM240T100C5上编程,带有用于显示交通信号灯的自定义扩展板.由于电路板上最慢的时钟设置仍然比我想要的快,我需要写一个时钟分频器,我这样做:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
entity clockdivider is
port
(
clkin : in std_logic;
dividedclk : out std_logic
);
end clockdivider;
architecture divider of clockdivider is
signal J : std_logic;
signal K : std_logic;
begin
J <= '1';
K <= '1';
process(clkin)
variable tempdividedclk : std_logic;
begin
if (rising_edge(clkin)) then
tempdividedclk := (NOT(tempdividedclk) AND J) OR (tempdividedclk AND (NOT(K)));
end if;
dividedclk <= '0';
dividedclk <= tempdividedclk;
end process;
END divider;
Run Code Online (Sandbox Code Playgroud)
这在主板上运行良好,但在模拟器(ModelSim)中,"divideclk"输出无法初始化为任何东西.我想知道是否有人知道为什么?
在ModelSim中,您可以使用类似的东西
在modelsim中我们可以使用init_signal_spy("../.../ sig",mysignal);
获得深层次的信号.有没有办法通过Cadence的NCVhdl获得这样的信号?
这应该标记为"SimVision",这是工具的名称,但该标志似乎不存在.
我正在研究一个使用FPGA和Arduino的项目,其中我必须显示我的fpga设备关闭了多长时间.我正在使用BASYS3 FPGA板.一旦我关闭了FPGA,程序就会被删除.