非法顺序语句错误

时间:2015-10-29 03:44:27

标签: vhdl sequential dataflow shift-register

请有人告诉我如何修复此代码吗?

Illegal_sequential_statement错误是什么(在modelSim中)?

为什么它说nead';'附近(在quartus中)?

LIBRARY ieee ;
USE ieee.std_logic_1164.all;

ENTITY Shift_reg IS
PORT( Par_LD: IN std_logic_vector(7 DOWNTO 0);
      Serial_In: IN std_logic;
      Serial_Out:OUT std_logic;
      RST, LD, EN, CLK: IN std_logic);
END Shift_reg;


ARCHITECTURE shiftRegARCH OF Shift_reg IS 

SIGNAL TEMP_REG : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL TEMP_SOUT : STD_LOGIC;

BEGIN

process(CLK,RST)
  BEGIN 

    TEMP_REG <= (OTHERS => '0') WHEN (RST = '1') ELSE 
                 Par_LD WHEN (EN = '0' AND LD = '1')ELSE
                (Serial_In & TEMP_REG(7 DOWNTO 1)) WHEN (EN = '1')ELSE
                TEMP_REG ;                
    TEMP_SOUT <= TEMP_REG(0) WHEN (EN = '1') ELSE TEMP_SOUT;
    Serial_Out <= TEMP_SOUT;
  END PROCESS;


END shiftRegARCH ;

2 个答案:

答案 0 :(得分:4)

条件信号分配

    TEMP_REG <= (OTHERS => '0') WHEN (RST = '1') ELSE
             Par_LD WHEN (EN = '0' AND LD = '1')ELSE
            (Serial_In & TEMP_REG(7 DOWNTO 1)) WHEN (EN = '1')ELSE
            TEMP_REG ;

仅对VHDL 2008有效。您可能将编译器设置设置为VHDL 2002或VHDL 93

答案 1 :(得分:3)

除了lasplund注意到VHDL -2008兼容工具仅支持顺序条件信号分配,有时可以通过工具配置或命令行参数来解决,您没有使用公认的构造来指示顺序(时钟)硬件

综合不会将灵敏度列表中CLK的存在解释为推断时钟存储,并且library ieee; use ieee.std_logic_1164.all; entity shift_reg is port ( par_ld: in std_logic_vector(7 downto 0); serial_in: in std_logic; serial_out: out std_logic; rst, ld, en, clk: in std_logic ); end entity shift_reg; architecture shiftregarch of shift_reg is signal temp_reg: std_logic_vector(7 downto 0); -- signal temp_sout: std_logic; begin process(clk,rst) begin -- temp_reg <= (others => '0') when (rst = '1') else -- par_ld when (en = '0' and ld = '1') else -- serial_in & temp_reg(7 downto 1) -- when (en = '1'); -- -- temp_reg ; if rst = '1' then temp_reg <= (others => '0'); serial_out <= '0'; elsif rising_edge(clk) then if en = '0' and ld = '1' then temp_reg <= par_ld; elsif en = '1' then temp_reg <= serial_in & temp_reg( 7 downto 1); serial_out <= temp_reg(0); end if; end if; -- temp_sout <= temp_reg(0) when (en = '1') else temp_sout; -- serial_out <= temp_sout; end process; end architecture shiftregarch; 上会出现上升沿和下降沿事件。

这几乎说你应该使用具有公认形式的等效if语句来推断时钟硬件:

else

请注意,缺少最终temp_sout s在顺序存储中是多余的,并且在不需要的情况下抛弃serial_out并重置en并将其包含在@using (Html.BeginForm("userrights", "Users", FormMethod.Post, new { @class = "form-horizontal", role = "form", @id = "userrights_frm", @name = "userrights_frm" })) { <div class="form-group"> <div class="col-md-7" style="padding-right:10px"> @Html.TextBoxFor(m => m.firstname, new { @class = "form-control", @id = "firstname", @name = "firstname", @placeholder = "Serach By User Name" }) @Html.HiddenFor(m => m.id, new { @class = "form-control", @id = "id", @name = "id" }) </div> <div class="col-sm-2"> <button type="submit" id="btn_search" value="Search" name="btn_search" class="btn btn-default">Search</button> </div> <div class="clearfix"></div> </div> <div class="form-group"> <div class="col-md-1" style="padding-top:7px"> Select Top Link </div> <div class="col-sm-6"> @Html.DropDownList("selectedMenu", Model._menu.Select(menu => new SelectListItem { Text = menu.menuname, Value = menu.menuid.ToString() }), "Select Menu", new { @class = "form-control" }) </div> <div class="clear"></div> </div> @Html.Partial("_userRightPartial", Model._UserRightPartialView) <div class="clear"></div> } 中伞。

Quartus II手册中的一个部分名为推荐的HDL编码样式,显示了Altera关于表达时钟逻辑的建议。它并非全包,因为现在撤回的IEEE Std 1076.6-2004提供了其他几种形式。

它包含几个移位寄存器示例,并讨论默认值和辅助控件。

使用rising_edge函数显示的方法可在1076.6中找到。

虽然Lars解决了您的即时错误,但您可能会遇到其他错误。