标签: vhdl

为什么我没有得到以下除以3时钟vhdl代码的输出?

以下代码中没有合成错误,但在模拟时仍未获得输出.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)

vhdl

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

是否可以在ModelSim中编写模拟验证程序?

我正在使用ModelSim来设计和模拟CPU架构.对于像我这样知道这一点的人,你也可能意识到在试图处理你面前的所有信号时,很难验证模拟数据.

有没有办法自动运行模拟并执行一些验证程序,以查看我得到的数据是否正确?

例如,我有一个特定的组件,当被信号激励时,在下一个时钟中,将返回被否定的信号.我想验证一下.怎么样?(当然没有手动检查屏幕上的信号).

谢谢

vhdl hdl modelsim

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

Modelsim没有认识到包含"案例......何时"的架构

我对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)

architecture vhdl modelsim

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

一个基于触发信号的时钟周期脉冲

我正在做一个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脉冲)是系统将经过两个状态而不是每个标志一个。

简而言之:当一个信号变高时(与何时变低无关),应在一个时钟周期内产生一个脉冲。

谢谢你的帮助。

triggers clock vhdl pulse

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

How do I split 16-bit data into 2 8-bit data in VHDL?

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)

vhdl

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

如果两个模拟器都需要使用自己的软件包,有没有办法将一个测试平台用于不同的模拟器?

我的测试平台使用在modelsim包(init_signal_spy)中定义的函数.所以我不能将这个测试平台用于与ModelSims vsim不同的模拟器,例如Candence的ncsim.但是在cadence包中有一个与ncsim(nc_mirror)等效的函数.解决方案是我需要有两个不同的测试平台.

但我只想使用一个.一种解决方案可能是,仅在设置了某个常量时才定义包.但我不知道这是否可行.

vhdl modelsim cadence

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

"在这种背景下,+不能拥有这样的操作数." 错误(VHDL代码)

  • 在这种情况下不能有这样的操作数

有人能告诉我出了什么问题以及如何解决它吗?

我试图在互联网上搜索问题,为什么我不能添加到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)

add vhdl operands

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

VHDL:加法器结果中的“ X”值

我创建了一个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

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

wait语句必须包含带UNTIL关键字的condition子句

以下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 intel-fpga quartus

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

VHDL和Verilog不依赖于技术?

在用VHDL或Verilog设计某些东西(例如CPU)并完成设计时,设计是否仅限于认证制造工艺(14nm),还是适用于目前可用的任何(10,7,5,3nm)工艺?

verilog vhdl system-verilog

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