标签: vhdl

了解状态机中的干扰锁存器

请看一下简单状态机的示例代码:

entity Top is
    Port ( Clock : in STD_LOGIC;
           Reset : in STD_LOGIC;
           TREADY : out STD_LOGIC
           );
end Top;

architecture Behavioral of Top is
    
    type STATE_t is (S0, S1, S2);
    signal CurrentState : STATE_t := S0;
    
    signal TREADY_Int   : STD_LOGIC := '0';
    
begin

    -- Transit network
    process(Clock, Reset, CurrentState)
        variable NextState : STATE_t;
    begin
        if(rising_edge(Clock)) then
            case CurrentState is
                when S0 =>
                    if(Reset = '1') then
                        NextState := S0;
                    else
                        NextState := S1;
                    end if;
                when S1 => …
Run Code Online (Sandbox Code Playgroud)

state-machine vhdl

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

为什么 if-else 序列末尾缺少“end if”?

错误是

teclat.vhdl:57:12:需要“if”而不是“process”

end if是它应该在的地方。我不明白为什么它不能像缺少end ifalways一样编译。

architecture v1 of teclat is
begin
    process(Buttons, COL, ROW) begin

    if (Buttons(1) = '1') then
        COL <= "100";
        ROW <= "100";
    else if (Buttons(2) = '1') then
        COL <= "010";
        ROW <= "100";
    else if (Buttons(3) = '1') then
        COL <= "001";
        ROW <= "100";
    else 
        ROW <= "111";
    end if;

    end process;
end v1;
Run Code Online (Sandbox Code Playgroud)

if-statement vhdl

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

vhdl的串联运算符如何工作以及与verilog有何不同

我在这个网站https://hdlbits.01xz.net/wiki/Vector3中使用 Verilog 解决了这个问题。

\n
module top_module (\n  input [4:0] a, b, c, d, e, f,\n  output [7:0] w, x, y, z );//\n  assign {w,x,y,z} = { a, b, c, d, e, f,2\'b11};\nendmodule\n
Run Code Online (Sandbox Code Playgroud)\n

所以我尝试将其转换为vhdl。这是我写的代码。

\n
LIBRARY ieee;\n   USE ieee.std_logic_1164.all;\nENTITY top_module IS\n   PORT (\n      a  : IN STD_LOGIC_VECTOR(4 DOWNTO 0);\n      b  : IN STD_LOGIC_VECTOR(4 DOWNTO 0);\n      c  : IN STD_LOGIC_VECTOR(4 DOWNTO 0);\n      d  : IN STD_LOGIC_VECTOR(4 DOWNTO 0);\n      e  : IN STD_LOGIC_VECTOR(4 DOWNTO 0);\n      f  : IN STD_LOGIC_VECTOR(4 DOWNTO 0);\n …
Run Code Online (Sandbox Code Playgroud)

verilog vhdl

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

VHDL 中的随机值生成器每次返回相同的值

我正在尝试为 VHDL 测试平台生成一些随机值(仅 1 和 0)。我尝试过以下代码:

impure function rand_int(min_val, max_val : integer) return integer is
  variable r : real;
  variable seed1, seed2 : integer := 999;
begin
  uniform(seed1, seed2, r);
  return integer(round(r * real(max_val - min_val + 1) + real(min_val) - 0.5));
end function;
Run Code Online (Sandbox Code Playgroud)

但它似乎只给出 1,而不是 0。我哪里做错了?

random function vhdl

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

多个VHDL包中常量同名,如何选择正确的常量?

我使用 TCL 脚本为每个子模块存储库生成一个 VHDL pkg,该存储库存储子模块的编译日期时间和 git 哈希值。存储 32 位 git hash 的常量称为 MAIN_GIT_HASH,是一个 std_logic_vector。

我现在有多个包,它们都包含一个名为 MAIN_GIT_HASH 的常量,我需要使用 VHDL“use”指令将它们包含到同一个源文件中。现在的问题是,从每个包中选择正确常量的正确方法是什么,因为只写“MAIN_GIT_HASH”会产生歧义?

vhdl

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

integer_vector 作为 NULL 数组

如何传递等于零integer_vector的空值length?(= 空数组)

\n

背景:

\n

在测试平台内,我\xc2\xb4d喜欢对不同类型的事务使用一个过程。像这样的东西:

\n
entity foo is\nend entity foo;\n\narchitecture bar of foo is\n  procedure Transaction (\n        constant RX_BYTES     : integer_vector\n        ) is\n    begin\n        report "RX_BYTES\'length = " & to_string(RX_BYTES\'length);\n    end procedure;\nbegin\n\n  Transaction(RX_BYTES => ""); -- it\xc2\xb4s about this line\n\nend architecture bar;\n
Run Code Online (Sandbox Code Playgroud)\n

我有这样的想法,但这不起作用:

\n
Transaction(RX_BYTES => "");\n
Run Code Online (Sandbox Code Playgroud)\n

模型模拟错误:

\n
** Error: C:/Users/sbuhrow/Desktop/NULL_Vector.vhd(13): (vcom-1600) No feasible entries for subprogram "Transaction".\n
Run Code Online (Sandbox Code Playgroud)\n

vhdl

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

VHDL:FlipFlop D代码中的错误

我用VHDL做D触发器这是代码:

LIBRARY STD,WORK;
USE STD.standard.all;
entity FlipFlopD is 
port(
  input, clock :in bit;
  output :out bit
);
end FlipFlopD;

--Architecture of the entity
Architecture FlipFlopDfunc of FlipFlopD is 
begin 
  PROCESS (clock)
  BEGIN
    IF (clock’EVENT AND clock=‘1’) THEN 
      output <= input; 
    END IF;
  END PROCESS;
end FlipFlopDfunc;
Run Code Online (Sandbox Code Playgroud)

这些是我尝试合成时得到的错误:

Line 16. Unexpected symbol read: ?.
Line 16. Unexpected symbol read: ?.
Line 16. parse error, unexpected IDENTIFIER, expecting COMMA or CLOSEPAR
Run Code Online (Sandbox Code Playgroud)

第16行的错误对我来说是因为我看不到任何'?' 这一行中的符号:

IF (clock’EVENT AND clock=‘1’) THEN 
Run Code Online (Sandbox Code Playgroud)

有谁知道如何纠正它?有谁知道如何处理这个错误parse error, unexpected …

compiler-errors vhdl

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

VDHL - 信号的初始值?

我有简单的VHDL模块输出PWM信号.PWM模块具有保持当前PWM百分比的信号.当我合成并实现它时,该信号默认重置为0.有没有办法在实现PWM百分比为20或其他什么后配置它?

谢谢 !

implementation fpga vhdl

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

VHDL IEEE标准库与组件

我正在为Xilinx FPGA开发一个VHDL项目,并且发现自己处在一条十字路口.

例如,我需要添加两个信号(C = A + B),并发现Xilinx具有可以生成可以完成工作的组件的工具.

但这也可以用标准VHDL实现:C <= A + B.

如果我使用标准VHDL,代码应该是可移植的,但这会降低吞吐量吗?

我的意思是,特殊组件是否在FPGA等中使用DSP功能,这使得它们更快,或者合成器通常能够处理这个问题吗?

vhdl hdl

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

错误:超出了非静态循环限制

下面是非恢复平方根算法.它工作正常,但在综合过程中显示错误:"第46行:超出非静态循环限制".

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

ENTITY code IS
    GENERIC(n: NATURAL:= 8);
    PORT(
        Xin: IN STD_LOGIC_VECTOR(2*n-1 DOWNTO 0);
        clk :IN STD_LOGIC ;
        root: OUT STD_LOGIC_VECTOR(n-1 DOWNTO 0) ;
        root2: OUT STD_LOGIC_VECTOR(2*n-1 DOWNTO 0) ;
        intval: IN STD_LOGIC_VECTOR(n-1 DOWNTO 0)  
    );
END code;

architecture Behavioral of code is

    Signal Outp : STD_LOGIC_VECTOR(n-1 DOWNTO 0);
    Signal Const1 : STD_LOGIC_VECTOR(n-1 DOWNTO 0) ;
    Signal Const2 : STD_LOGIC_VECTOR(n-1 DOWNTO 0) ;

--Signal Var : STD_LOGIC_VECTOR(n-1 DOWNTO 0);

begin

    Const1 <= "00000010";
    Const2 <= …
Run Code Online (Sandbox Code Playgroud)

vhdl

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