此代码用于PRBS(伪随机二进制序列)接收器。它应该采用三个值并模拟PRBS生成器并使用生成的值检查获得的值。 但代码显示已经存在的关键字(如begin)的错误
library ieee;
use ieee.std_logic_1164.all;
use ieee. std_logic_arith.all;
use ieee. std_logic_unsigned.all;
entity receiver is
port(
inp : in std_logic;
clock : in std_logic;
count : out std_logic_vector(4 downto 0);
check : out std_logic);
end receiver;
architecture rec of receiver is
signal P : std_logic_vector(2 downto 0);
signal O : std_logic_vector(2 downto 0);
process (clock)
variable cnt : integer range 0 to 3;
begin
if clock'event and clock='1' then
P <= inp & P(2 downto 1);
cnt<=cnt+1;
end if;
if (cnt = 3) then
O<=P;
elseif (cnt >3)
O <= inp & O(2 downto 1);
end if;
if((O(2) xor O(0)) = P(0))
check <= '0';
else
check <= '1';
count <= count +1;
end if;
end process;
end rec;
错误(10500):接收文件&#34; process&#34;; receiver.vhd(18)处的VHDL语法错误;期待&#34;开始&#34;或声明声明
错误(10500):接收文件的接收器.vhd(21)的VHDL语法错误&#34; if&#34 ;;期待&#34;结束&#34;,或&#34;(&#34;或标识符(&#34;如果&#34;是保留关键字)或并发声明
错误(10500):在文本&#34;和&#34;附近的receiver.vhd(21)处的VHDL语法错误;期待&#34;(&#34;,或&#34;&#39;&#34;,或&#34;。&#34;
错误(10500):接收文件的接收器.vhd(24)的VHDL语法错误&#34; if&#34 ;;期待&#34 ;;&#34;或标识符(&#34;如果&#34;是保留关键字),或&#34;架构&#34;
错误(10500):接收文件&#34;然后&#34;的receiver.vhd(25)处的VHDL语法错误;期待&#34;&lt; =&#34;
错误(10500):接收文件&#34; O&#34 ;;的receiver.vhd(28)处的VHDL语法错误;期待&#34;(&#34;,或&#34;&#39;&#34;,或&#34;。&#34;
错误(10500):接收文件的接收器.vhd(29)的VHDL语法错误&#34; if&#34 ;;期待&#34 ;;&#34;或标识符(&#34;如果&#34;是保留关键字),或&#34;架构&#34;
错误(10500):接收文件&#34; check&#34 ;; receiver.vhd(31)处的VHDL语法错误;期待&#34;&lt; =&#34;
错误(10500):接收文件&#34; else&#34 ;; receiver.vhd(32)处的VHDL语法错误;期待&#34;结束&#34;,或&#34;(&#34;或标识符(&#34;否则&#34;是保留关键字)或并发声明
错误(10500):接收文件的接收器.vhd(35)的VHDL语法错误&#34; if&#34 ;;期待&#34 ;;&#34;或标识符(&#34;如果&#34;是保留关键字),或&#34;架构&#34;
答案 0 :(得分:0)
您的实体结构需要如下所示:
entity receiver is
port (
-- Your ports
);
end receiver;
architecture rec of receiver is
-- Declarations here
begin -- ** Your code is missing this part
process (clock)
begin
-- your process
end process;
end rec;
如评论中所述,始终以您看到的第一个错误开头;首先理解并解决这个错误,因此许多后来的错误通常会消失。
您已将cnt
声明为变量,然后尝试使用cnt <= cnt + 1;
递增它,但变量分配应使用:=
而不是<=
。
下一个错误是您使用elseif
;这不是一个真正的关键字,看起来你想使用elsif
。这一行也缺少then
。
然后你有一行if((O(2) xor O(0)) = P(0))
,它再次错过then
。
最后,您尝试直接递增count
这是一个out
端口。这是不可能的,因为您正在尝试读取输出以向其添加输出;有几种方法可以解决这个问题,但我个人会创建一个中间信号(例如count_s
),在您的过程中使用,然后将输出分配给count <= count_s
的此信号,位于过程
解决了所有这些问题后,您的代码至少会编译。
作为旁注,它可以帮助您更好地垂直对齐代码;您的end process
应与其开头process
垂直对齐,依此类推。