该代码用于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):在文本“process”附近的receiver.vhd(18)处的VHDL语法错误;期待“开始”或声明语句错误(10500):接收文件“if”附近的receiver.vhd(21)的VHDL语法错误;期望“结束”,或“(”或标识符(“if”是保留关键字)或并发语句错误(10500):接收文件“和”附近的receiver.vhd(21)的VHDL语法错误;期待“ (“,”或“”或“ . ”错误(10500):在接收文件“if”;期待“;”或标识符(“if”是保留关键字)的receiver.vhd(24)处的VHDL语法错误或“架构”错误(10500):在接收文件“then”附近的receiver.vhd(25)处的VHDL语法错误;期望“<=”错误(10500):在文本“O”附近的receiver.vhd(28)处的VHDL语法错误“; expecting”(“,”或“”或“ . ”错误(10500):接收器.vhd(29)的VHDL语法错误接近文本“if”;期待“;”或标识符(“if”是保留关键字)或“体系结构”错误(10500):在文本“check”附近的receiver.vhd(31)处的VHDL语法错误;期望“<=”错误(10500):receiver.vhd处的VHDL语法错误(32)接近文本“else”;期望“结束”,或“(”或标识符(“else”是保留关键字),或并发语句错误(10500):接收文本处接收器.vhd(35)处的VHDL语法错误“如果”;期待“;”或标识符(“if”是保留关键字)或“架构”
1 回答
您的实体结构需要如下所示:
正如评论中所提到的,总是从你看到的第一个错误开始;首先理解并解决这个问题,因此许多后来的错误通常会消失 .
您已将
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
垂直对齐,依此类推 .