vhdl中与串行发送器并行

时间:2018-05-20 21:05:51

标签: vhdl

代码用于具有复位的并行到串行发送器,去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;

1 个答案:

答案 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') ;