下面的VHDL代码是一个简单的交换程序。但它并没有交换a和b的输入。我已经在评论中给出了成绩单的价值。
library ieee;
use ieee.std_logic_1164.all;
entity vhdl_swap is
port(a,b: inout integer);
end vhdl_swap;
architecture ar of vhdl_swap is
signal s : std_logic;
begin
process(s)
variable var : integer:=0;
begin
report "var is
我正在用VHDL编写一个项目的顶层文件。我有一个问题-关于端口映射的问题。下面是我试图实现的代码的一部分,然后是上下文的描述。 generate_microfib:
for i in 0 to 5 generate
fib: microfib
Port Map (
InL => SignalNumber(num(i)*2 + i), --Input Left
OutR => SignalNumber(num(i)*2 + i+1) --Output Right
);
end
我有一些VHDL代码在合成时表现得很奇怪,但我怀疑这是我对VHDL合成的基本理解是错误的。
"sync“是一个短脉冲(大约半个clk周期),它在clk上升沿是高的,但不久之后就会变低。在合成过程中,当sync为高电平时,仅在clk上升沿分配部分信号。
同步是否需要在某个最短时间内保持高电平?
process(clk)
begin
if rising_edge(clk) then
if sync = '1' then
a <= '1';
y3 <= y2;
y2 <= y1;
y1 &
我试图学习VHDL,作为练习,我试图构建一个非常简单的串行端口,它使用RS-232风格的信令(8N1格式)。
下面是这个小项目中两个vhdl文件的代码..。
“glue.vhd”(顶层模块)
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use ieee.std_logic_unsigned.all;
library MACHXO2;
use MACHXO2.components.all;
entity Glue is
port(
tx : out std_logic := &
我想知道我们应该如何解释这个vhdl代码,vhdl描述中描述的是哪些硬件?
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY Example IS
PORT ( A,B : IN std_logic,
Y : OUT std_logic);
END Example;
ARCHITECTURE test OF example IS BEGIN
Y <=A AND B;
proc1 : PROCESS (A,B) IS
BEGIN
IF (A = ’1’) THEN Y <=B;
END IF;
END PROCESS proc1;
我正在尝试用ModelSim Microsem10.2c编译以下示例:
architecture example of assignment_to_an_aggregate is
type vowel_type is (a, e, i, o, u);
type consonant_type is (b, c, d, f, g);
signal my_vowel: vowel_type;
signal my_consonant: consonant_type;
begin
(my_vowel, my_consonant) <= (a, b);
我对VHDL很陌生。给出了从24 MHz的输入时钟信号产生1Hz (占空比50%)的时钟信号的代码。我有一些问题要进一步澄清。
如何选择计数器的限制?在下面的情况下,12000000。如果我想要产生一个8Hz的时钟信号,这个限制是什么。
如果我想将占空比改为80%,应该如何调整代码?
库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;实体时钟是端口( CLKin: in std_logic;reset: in std_logic;CLKout: out std
在Quartus II状态机中,我有一个8位的输入。在一个状态到状态的转换中,我想检查输入的低4位是否为例7
我添加到转换条件中的代码
input[3:0] == 7
但每次我想在中编写vhdl时,都会出现这个错误:
HDL file generation was NOT successful, Error (154013): Component 01 contains an illegal name character combination
我不知道我是否可以通过这种方式进行检查,我对verilog编码了解不多,我正在使用图表
我必须实现一个循环,在VHDL上更新循环中的变量(或信号)。换句话说,我必须实现这个伪代码。
res = 1
while condition:
res = res * val #for example, but it could be another operation
return res
我知道在VHDL中不可能更新信号的值,所以我不知道如何继续。
例如,我尝试创建一个nb_iterations元素数组,其中将更新后的值放在数组的相应示例中。但有时我的迭代次数可能很大,所以在内存中保留这么大的数组是不有效的。
是否有任何方法来更新或覆盖VHDL上的信号,从而使实现这样的循环成为
背景
我对VHDL很陌生,并试图理解如何编写双触发器来处理与用户按下我的fpga板上的按钮有关的亚稳态(Cyclone )。我理解使用双触发器来稳定数据背后的逻辑,但不确定如何用VHDL实现。(来源:,)
问题
我不知道如何编码双触发器(见下面的尝试)。有人能提供显示双触发器的示例代码吗?
我尝试双触发器的示例代码
--input is std_logic;
input <= key(0) -- user pressed key =1, key can be pressed and held
process(input)
signal inputFF : std_logic;
b
我试图在实验室中为状态机设置一个问题,当我试图在Quartus中编译时,我一直收到错误。
我试过用逗号,否则的语句,似乎什么都没有用。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.All;
ENTITY SM_VHDL IS -- Do not modify this entity statement!
PORT(X : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
RESETN,
CLOCK : IN STD_LOGIC;
Z : OUT STD_LOGIC;
我试图用VHDL编写一个4位计数器,根据我的UD变量的值从"0000“到"1111”或者从"1111“到"0000”(如果UD='1‘它应该向下计数,如果它是’0‘up)。还有一个信号RCO_L,当我的计数器到达计数器(0或15)的一侧时,它得到值=‘0’。最后,当计数器设置为1时,有一个ENP_L信号会抑制它。
我发现很难编写代码,因为我对VHDL有点陌生,而且我遇到了很多错误。如果有人能帮我,我会很感激的。
这就是我到目前为止所做的:
*entity contador is
Port ( A : in STD_LOGIC_VECTOR(3
我有一个4到16的vhdl解码器。我想要一个启用输入,但我是新的vhdl编码。我希望保持代码的这种结构(我不想使用任何其他快捷方式,或者完全修改代码)。我试着为enable编写一个e输入,并尝试执行if e = "1" then,但它不起作用。
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity decode4to16 is
port(
oct : in std_logic_vector(3 downto 0);
e : in std_logic;
dec : out std_logic_vector(15 downto 0));
我正在练习一些基本的vhdl programs.Now,我遇到了算术运算。我使用bit_vector并直接乘以输入信号,但是它错误地“infix运算符不可行的条目”.The程序如下:
entity multiplier is
port(a,b : in bit_vector(3 downto 0);
c: out bit_vector(7 downto 0));
end multiplier;
architecture ar of multiplier is
begin
c<=(a*b);
end ar;
但是我偶然发现了这个程序
我正在用累加器编码一个4位二进制加法器:
library ieee;
use ieee.std_logic_1164.all;
entity binadder is
port(n,clk,sh:in bit;
x,y:inout std_logic_vector(3 downto 0);
co:inout bit;
done:out bit);
end binadder;
architecture binadder of binadder is
signal state: integer range 0 to 3;
s
我花了很长时间试图弄清楚如何将Xilinx Spartan 6 FPGA的核心生成的块RAM连接到双向数据总线。我能找到的所有例子都说只使用输入和输出数据端口,但在我的例子中,我被迫将其用作双向数据总线。
我用的是VHDL。
生成的组件具有以下定义:
COMPONENT ram
PORT (
clka : IN STD_LOGIC;
wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
addra : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
dina : IN STD_LO
我正在尝试使用VHDL对T触发器进行建模。
library ieee;
use ieee.std_logic_1164.all;
entity tff is
port (
clk: std_logic;
t: in bit;
q: out bit;
qbar: out bit);
end tff;
architecture tff_arch of tff is
begin
process(clk)
begin
if (clk = '1' and t = '1'
考虑以下VHDL代码:
process(a, b)
begin
equal <= '0'; --default
gt <= '0'; --default
if a=b then
equal <= '1';
end if;
if a>b then
gt <= '1';
end if;
end process;
所谓的“默认值”应该用来保护信号gt和equal的锁存。但是,由于这不是一个时钟过程,这难道不是信号gt和equal
是否可以使用VHDL-2008层次化引用/外部名称来引用Verilog网?Questa (10.6c)通过以下错误消息停止模拟:
vsim-8509:"dut_i.my_net“的对象类"SIGNAL”与表示对象的"net“类不同。
下面是失败的VHDL代码:
alias my_alias is << signal dut_i.my_net : std_logic >>;
如何实现具有“不关心”输入并直接表示“不关心”的VHDL函数?
的练习4.8-2a要求我:
...write VHDL模型实现了using...selected信号分配的这些功能。
F (A,B,C,D) =A‘BCD’+ B'C +BCD‘
此代码适用于:
library ieee;
use ieee.std_logic_1164.all;
entity funca_selected is
port (
a: in std_ulogic;
b: in std_ulogic;
c: in std_ulogic;
d: in std_ulog
我已经了解到,当S和R都是'0‘时,oscillate在下面的电路VHDL代码中只是'1’之后就会发生振荡。
这是SRLATCH的VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity SRLATCH_VHDL is
port(
S : in STD_LOGIC;
R : in STD_LOGIC;
Q : inout STD_LOGIC;
NOTQ: inout STD_LOGIC);
end SRLATCH_VHDL;
architecture Beha
我需要设计VHDL在一个七段显示器上运行一个计数器。这三个输入是基于三个按钮的启动、停止和递增。Start将启动计数器,直到按下stop按钮才会停止。我需要创建一个增量按钮,这将只加1一次。我只需要让增量按钮工作即可。
process(start, stop, inc, clk)
begin
if (clk'event and clk = '1') then
if (rst = '1') then
run <= '0';
end if;
if(start = '1') then
如何在VHDL中将信号延迟到给定的周期数?周期数是作为一般情况给出的。
任何其他选项,而不是
process(CLK) is
begin
if rising_edge(CLK) then
a_q <= a;
a_q_q <= a_q;
a_q_q_q <= a_q_q;
-- etc
end if;
end process;