代码用于具有复位的并行到串行发送器,去clk和sout
这是代码,但它给了我错误
数组长度不正确(1)。预计长度为11。
错误:COMP96_0083:proj22.vhd:(28,9):选择表达式的类型与案例表达式不匹配。
错误:COMP96_0301:proj22.vhd:(26,3):选择'其他'当所有替代品都不包括在内时,必须在场。
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
entity trans is
port(reset ,go :in std_logic;
clk :in std_logic_vector(11 downto 1);
pin:in std_logic_vector(7 downto 0);
sout:out std_logic_vector(11 downto 1));
end entity trans ;
architecture transmitter of trans is
signal clk_counter:std_logic_vector(11 downto 1);
--signal parity:std_logic;
begin
process(reset,go)
begin
--sout(10)<= parity;
clk_counter <= clk;
if (reset ='1' ) then
sout <=(others=>'1');
if(reset ='0' and go ='1') then
case clk_counter is
when "1" => sout(1)<= '0' ;
when "2" => sout(2)<= pin(0);
when "3" => sout(3)<= pin(1);
when "4" => sout(4)<= pin(2);
when "5" => sout(5)<= pin(3);
when "6" => sout(6)<= pin(4);
when "7" => sout(7)<= pin(5);
when "8" => sout(8)<= pin(6);
when "9" => sout(9)<= pin(7);
when "10" => sout(10) <= pin(0) xor pin(1) xor pin(2) xor pin(3) xor pin(4) xor pin(5) xor pin(6) xor pin(7);
when "11"=> sout(11)<= '1';
end case;
end if ;
end if;
end process;
end architecture transmitter;
答案 0 :(得分:3)
数组长度不正确(1)。预计长度为11。
错误:COMP96_0083:proj22.vhd:(28,9):选择表达式的类型与案例表达式不匹配。
VHDL是强类型语言。 clk_counter
是12位宽。它必须与以下内容进行比较:(a)兼容的文字(硬编码值)和(b)具有相同的宽度。 "1"
是(a)字符串和(b)错误的宽度。您必须为std_logic_vector
使用二进制字符串,并且宽度必须匹配,例如:
when "00000000001" => sout(1)<= '0' ;
when "00000000010" => sout(1)<= sout(2)<= pin(0);
错误:COMP96_0301:proj22.vhd:(26,3):选择&#39;其他&#39;当所有替代品都不包括在内时,必须在场。
在VHDL中case
语句必须完整 - 不能缺少选择。通常,有一些选择不包括在内;这些可以通过添加&#34;其他&#34;科。 (坦率地说,错误消息几乎告诉你这个,这也可能解释你所有的downvotes),例如:
when others => sout= (others => 'X') ;