Vhdl 转换为标准逻辑向量并更有效地切片

Vhdl 转换为标准逻辑向量并更有效地切片,vhdl,Vhdl,在一个进程内,我对无符号向量做了一些工作,在进程结束时,我需要对这些向量进行切片并回溯到SLV。有没有比这更好/更干净的方法 out_O : out STD_LOGIC_VECTOR(15 downto 0) variable o : UNSIGNED(17 downto 0) := (others => '0'); variable outcast_t : STD_LOGIC_VECTOR(17 downto 0) := (others => '0');

在一个进程内,我对
无符号
向量做了一些工作,在进程结束时,我需要对这些向量进行切片并回溯到
SLV
。有没有比这更好/更干净的方法

    out_O : out  STD_LOGIC_VECTOR(15 downto 0)
    variable o : UNSIGNED(17 downto 0) := (others => '0');
    variable outcast_t : STD_LOGIC_VECTOR(17 downto 0) := (others => '0');

    ...

    o := mod_t - div_t + const;

    outcast_t := STD_LOGIC_VECTOR(o);
    out_O <= outcast_t(15 downto 0); 
out\u O:out标准逻辑向量(15到0)
变量o:UNSIGNED(从17到0):=(其他=>'0');
变量弃置:标准逻辑向量(17到0):=(其他=>'0');
...
o:=mod_t-div_t+常量;
弃置t:=标准逻辑向量(o);
与对照组比较,差异无显著性(p>0.05)

slv将被处理为unsigned,您可以直接对该类型执行操作,以避免强制转换

你也可以这样做

out_O <= o(out_O'range);

out\O你不需要中间信号:
out\O哦,我是在演员表演后切片的。这是一个好消息,也是使用IEEE的更好解决方案。不建议使用无符号的数值。@Paebbels我个人不介意转换。有时我的位数组是一个数字,我可能使用无符号类型,有时它在通用数据总线上传输并成为slv。根据情况,一种数据类型感觉更“原生”,我不介意来回转换以表达设计意图。有些人真的很介意,宁愿只吃slv。有些人会在测试台中使用未签名的数字_std_,但在RTL中不使用,以避免合成支持问题。建议可能取决于情况和你问的人
out_O <= o(out_O'range);