Syntax VHDL:类似于描述加法器的Verlilog语法

Syntax VHDL:类似于描述加法器的Verlilog语法,syntax,vhdl,verilog,Syntax,Vhdl,Verilog,我试图复制这个快捷方式,以便在分离输出进位和结果的同时轻松生成加法器: reg [31:0] op_1; reg [31:0] op_2; reg [31:0] sum; reg carry_out; always @(posedge clk) { carry_out, sum } <= op_1 + op_2; reg[31:0]op_1; reg[31:0]op_2; reg[31:0]总和; 注册执行; 始终@(posedge clk) {执行,求和}您必须将op_1,o

我试图复制这个快捷方式,以便在分离输出进位和结果的同时轻松生成加法器:

reg [31:0] op_1;
reg [31:0] op_2;
reg [31:0] sum;
reg carry_out;

always @(posedge clk)
    { carry_out, sum } <= op_1 + op_2;
reg[31:0]op_1;
reg[31:0]op_2;
reg[31:0]总和;
注册执行;
始终@(posedge clk)

{执行,求和}您必须将op_1,op_2扩展到33位(由于数字是无符号的,所以在顶部添加一个零,对于有符号的值,您将复制顶部的位)。结果(总和)也必须为33位

执行常规的33+33位加法(所有转换都使用VHDL)。

然后将和[32]分开作为进位

您必须将op_1、op_2扩展到33位(由于数字是无符号的,所以在顶部添加一个零,对于有符号的值,您将复制顶部的位)。结果(总和)也必须为33位

执行常规的33+33位加法(所有转换都使用VHDL)。

然后将和[32]分开作为进位

太糟糕了,VHDL 2008不是一个选项。如果是,则以下内容将使其成为:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity foo is
  port(
    clk:  in  std_ulogic;
    a, b: in  u_unsigned(31 downto 0); 
    s:    out u_unsigned(31 downto 0); 
    co:   out std_ulogic
  );  
end entity foo;

architecture rtl of foo is
begin

  process(clk)
  begin
    if rising_edge(clk) then
      (co, s) <= ('0' & a) + ('0' & b); 
    end if;
  end process;

end architecture rtl;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体foo是
港口(
时钟:标准逻辑;
a、 b:在u_中无符号(31到0);
s:out u_未签名(31到0);
co:out std_ulogic
);  
最终实体foo;
foo-is的rtl体系结构
开始
过程(clk)
开始
如果上升沿(clk),则

(co,s)太糟糕了,VHDL 2008不是一个选项。如果是,则以下内容将使其成为:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity foo is
  port(
    clk:  in  std_ulogic;
    a, b: in  u_unsigned(31 downto 0); 
    s:    out u_unsigned(31 downto 0); 
    co:   out std_ulogic
  );  
end entity foo;

architecture rtl of foo is
begin

  process(clk)
  begin
    if rising_edge(clk) then
      (co, s) <= ('0' & a) + ('0' & b); 
    end if;
  end process;

end architecture rtl;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
实体foo是
港口(
时钟:标准逻辑;
a、 b:在u_中无符号(31到0);
s:out u_未签名(31到0);
co:out std_ulogic
);  
最终实体foo;
foo-is的rtl体系结构
开始
过程(clk)
开始
如果上升沿(clk),则

(co,s)没有尝试也没有研究。有很多关于堆栈溢出的例子。还有互联网的其他部分。@JHBonarius我的互联网搜索技能只发现了涉及临时信号/变量的不必要的复杂操作,但没有像我的Verilog示例中那样快速描述它。从答案可以推断,没有VHDL-2008就没有这样的方法。所以,我认为我的问题应该是正确的。没有尝试也没有研究。有很多关于堆栈溢出的例子。还有互联网的其他部分。@JHBonarius我的互联网搜索技能只发现了涉及临时信号/变量的不必要的复杂操作,但没有像我的Verilog示例中那样快速描述它。从答案可以推断,没有VHDL-2008就没有这样的方法。所以,我认为我的问题应该是有效的。因为这还不完全,我认为这更多的是一个评论。answer@JHBonarius我假设“完成”是指我没有显示工作的VHDL代码。它确实回答了这个问题,据我所知,编写代码是习惯性的,而不是强制性的。这里没有提到数字\u std,它取代了std\u logic\u unsigned(并且是标准的一部分)中的函数。没有提到使用计时语句。1/提问者使用的是Verilog结构,大部分是经验丰富的用户知道的,因此我把他放在那里。2/这使我将问题解释为:像Verilog中那样有VHDL捷径吗?因此,实际的完整答案是3号/用户提到他自己知道STD_LOGIC_UNSIGNED是非标准的。谢谢,太糟糕了,我不能“勾选”两个答案。我想我应该选择最完整的一个。因为这还不完整,我认为这更多的是一个评论。answer@JHBonarius我假设“完成”是指我没有显示工作的VHDL代码。它确实回答了这个问题,据我所知,编写代码是习惯性的,而不是强制性的。这里没有提到数字\u std,它取代了std\u logic\u unsigned(并且是标准的一部分)中的函数。没有提到使用计时语句。1/提问者使用的是Verilog结构,大部分是经验丰富的用户知道的,因此我把他放在那里。2/这使我将问题解释为:像Verilog中那样有VHDL捷径吗?因此,实际的完整答案是3号/用户提到他自己知道STD_LOGIC_UNSIGNED是非标准的。谢谢,太糟糕了,我不能“勾选”两个答案。我想我应该选择最完整的一个。你忘了时钟:-)@Oldfart:你说得对,我把注意力集中在算术问题上。更新了答案。你忘了时钟:-)@Oldfart:你说得对,我专注于算术题。更新了答案。