以下代码中没有合成错误,但在模拟时仍未获得输出.cout一直保持逻辑1.请任何人帮我解决什么错误?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity divide_by_3 is
port (
cout :out std_logic; -- Output clock
clk :in std_logic; -- Input clock
reset :in std_logic -- Input reset
);
end divide_by_3;
architecture Behavioral of divide_by_3 is
signal pos_cnt :std_logic_vector (1 downto 0);
signal neg_cnt :std_logic_vector (1 downto 0);
begin
process (clk, reset)
begin
if (reset = '1') then
pos_cnt <= (others=>'0');
elsif (rising_edge(clk)) then
if (pos_cnt = "10") then
pos_cnt <= pos_cnt + '1'; …Run Code Online (Sandbox Code Playgroud) 我正在使用ModelSim来设计和模拟CPU架构.对于像我这样知道这一点的人,你也可能意识到在试图处理你面前的所有信号时,很难验证模拟数据.
有没有办法自动运行模拟并执行一些验证程序,以查看我得到的数据是否正确?
例如,我有一个特定的组件,当被信号激励时,在下一个时钟中,将返回被否定的信号.我想验证一下.怎么样?(当然没有手动检查屏幕上的信号).
谢谢
我对Modelsim很新,我不断从中得到这个"错误".基本上我用vhdl编写了一个计数器:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity Contatore16bit is
port (
CLK: in std_logic;
RESET: in std_logic;
LOAD: in std_logic;
UP_DOWN: in std_logic;
ENABLE: in std_logic;
USCITA: out unsigned(15 downto 0) );
end Contatore16bit;
architecture Arch of Contatore16bit is
signal temp_value, next_value: unsigned(15 downto 0);
begin
process (CLK)
begin
if CLK'Event and CLK='1' then
if RESET='1' then
temp_value <= (others => '0');
elsif ENABLE='1' then
temp_value <= next_value;
end if;
end if;
--CASE UP_DOWN IS
--WHEN '0' …Run Code Online (Sandbox Code Playgroud) 我正在做一个MIDI接口。UART工作正常,它将8位消息以及标志发送到控制单元。当标志变高时,单元会将消息存储在寄存器中,并将clr_flag变高,以便再次将UART的标志设置为低。问题是我不能将此clr_flag设置为一个周期长。我需要将其设置为一个周期长,因为该信号还控制一个状态机,该状态机指示正在存储的消息类型(例如,note_on-> key_note->力度)。
我的问题是,信号(在这种情况下为标志)如何仅在一个clk周期内触发脉冲?我现在在一个时钟周期内几乎发出了一个脉冲,但是我做了两次,因为该标志尚未变为0。香港专业教育学院尝试了很多方法,现在我有这个:
get_data:process(clk, flag)
begin
if reset = '1' then
midi <= (others => '0');
clr_flag <= '0';
control_flag <= '0';
elsif ((clk'event and clk='1') and flag = '1') then
midi <= data_in;
clr_flag <= '1';
control_flag <= '1';
elsif((clk'event and clk='0') and control_flag = '1') then
control_flag <= '0';
elsif((clk'event and clk='1') and control_flag = '0') then
clr_flag <= '0';
end if;
end process;
Run Code Online (Sandbox Code Playgroud)
这个双脉冲或长于一个周期脉冲的问题(在此之前,我使clr_flag成为两个周期的clk脉冲)是系统将经过两个状态而不是每个标志一个。
简而言之:当一个信号变高时(与何时变低无关),应在一个时钟周期内产生一个脉冲。
谢谢你的帮助。
How do I split 16-bit data into 2 8-bit data?
signal part : std_logic_vector (16 downto 0);
signal part_1 : std_logic_vector (8 downto 0);
signal part_2 : std_logic_vector (8 downto 0);
Run Code Online (Sandbox Code Playgroud)
我的测试平台使用在modelsim包(init_signal_spy)中定义的函数.所以我不能将这个测试平台用于与ModelSims vsim不同的模拟器,例如Candence的ncsim.但是在cadence包中有一个与ncsim(nc_mirror)等效的函数.解决方案是我需要有两个不同的测试平台.
但我只想使用一个.一种解决方案可能是,仅在设置了某个常量时才定义包.但我不知道这是否可行.
- 在这种情况下不能有这样的操作数
有人能告诉我出了什么问题以及如何解决它吗?
我试图在互联网上搜索问题,为什么我不能添加到STD_LOGIC_VECTOR,我没有找到任何解释我的问题的东西.所以我在这里问你们这是什么问题?
entity Modes is
Port ( RST : in STD_LOGIC;
CLK_33MHZ : in STD_LOGIC;
BTN : in STD_LOGIC;
LED : out STD_LOGIC);
end Modes;
architecture Behavioral of Modes is
signal ledstatus : STD_LOGIC;
signal mode : STD_LOGIC_VECTOR(1 downto 0);
signal modestatus : STD_LOGIC_VECTOR (1 downto 0);
begin
process(CLK_33MHZ,RST)
variable cnt : integer range 0 to 33000000;
begin
if(RST = '1') then
cnt := 0;
mode <= "00";
LED <= '0';
ledstatus <= '0';
elsif(rising_edge(CLK_33MHZ)) then
if(BTN …Run Code Online (Sandbox Code Playgroud) 我创建了一个4位加法器,现在我想添加和将sub 2寄存器作为符号幅度值
因此,有两个名为A和B的寄存器,两个名为As和B的位在A和B中具有值的符号位,一个用于对B进行2补码减法的XOR门,最终结果应存储在A和As中(value和Sign)和名为AVF的寄存器中的溢出位
这是一个简单的图:

模式= 1 =>子; Mod = 0 =>添加
我写了这个代码:
4位加法器:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY Adder_4_Bit IS
PORT(
A, B : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Mode : IN STD_LOGIC;
Sum : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COut : OUT STD_LOGIC
);
END Adder_4_Bit;
ARCHITECTURE Structure OF Adder_4_Bit IS
COMPONENT FullAdder_1_Bit IS
PORT(
X, Y : IN STD_LOGIC;
CIn : IN STD_LOGIC;
FSum : OUT STD_LOGIC;
COut : OUT STD_LOGIC
);
END COMPONENT;
COMPONENT XORGate IS
PORT(
X1, X2 …Run Code Online (Sandbox Code Playgroud) 以下VHDL将用于测试工作台.在分析期间,我在第一个等待语句中一直出现错误:"wait语句必须包含带有UNTIL关键字的条件子句"我有几个以这种方式编写的工作测试平台.我似乎无法找到错误可能是什么.
`library IEEE;
USE IEEE.std_logic_1164.all;
entity case_ex_TB is end;
architecture simple_test of case_ex_TB is
--- DUT Component Declaration ---
component case_ex
port(
clk, rstN: IN std_logic;
color: OUT std_logic_vector(2 downto 0));
end component;
--- Signals Declaration ---
signal rst, clock: std_logic:='0';
signal color: std_logic_vector(2 downto 0);
begin
DUT: case_ex --- DUT instantiation ---
port map (clk => clock,
rstN => rst,
color => color);
--- Signal's Waves Creation ---
rst <= '1','0' after 50 ns, '1' after 2 us;
clock_crtate: …Run Code Online (Sandbox Code Playgroud) 在用VHDL或Verilog设计某些东西(例如CPU)并完成设计时,设计是否仅限于认证制造工艺(14nm),还是适用于目前可用的任何(10,7,5,3nm)工艺?