请看一下简单状态机的示例代码:
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) 错误是
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) 我在这个网站https://hdlbits.01xz.net/wiki/Vector3中使用 Verilog 解决了这个问题。
\nmodule 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\nRun Code Online (Sandbox Code Playgroud)\n所以我尝试将其转换为vhdl。这是我写的代码。
\nLIBRARY 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) 我正在尝试为 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。我哪里做错了?
我使用 TCL 脚本为每个子模块存储库生成一个 VHDL pkg,该存储库存储子模块的编译日期时间和 git 哈希值。存储 32 位 git hash 的常量称为 MAIN_GIT_HASH,是一个 std_logic_vector。
我现在有多个包,它们都包含一个名为 MAIN_GIT_HASH 的常量,我需要使用 VHDL“use”指令将它们包含到同一个源文件中。现在的问题是,从每个包中选择正确常量的正确方法是什么,因为只写“MAIN_GIT_HASH”会产生歧义?
如何传递等于零integer_vector的空值length?(= 空数组)
背景:
\n在测试平台内,我\xc2\xb4d喜欢对不同类型的事务使用一个过程。像这样的东西:
\nentity 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;\nRun Code Online (Sandbox Code Playgroud)\n我有这样的想法,但这不起作用:
\nTransaction(RX_BYTES => "");\nRun Code Online (Sandbox Code Playgroud)\n模型模拟错误:
\n** Error: C:/Users/sbuhrow/Desktop/NULL_Vector.vhd(13): (vcom-1600) No feasible entries for subprogram "Transaction".\nRun Code Online (Sandbox Code Playgroud)\n 我用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 …
我有简单的VHDL模块输出PWM信号.PWM模块具有保持当前PWM百分比的信号.当我合成并实现它时,该信号默认重置为0.有没有办法在实现PWM百分比为20或其他什么后配置它?
谢谢 !
我正在为Xilinx FPGA开发一个VHDL项目,并且发现自己处在一条十字路口.
例如,我需要添加两个信号(C = A + B),并发现Xilinx具有可以生成可以完成工作的组件的工具.
但这也可以用标准VHDL实现:C <= A + B.
如果我使用标准VHDL,代码应该是可移植的,但这会降低吞吐量吗?
我的意思是,特殊组件是否在FPGA等中使用DSP功能,这使得它们更快,或者合成器通常能够处理这个问题吗?
下面是非恢复平方根算法.它工作正常,但在综合过程中显示错误:"第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)