gpt4 book ai didi

vhdl - 方向无关切片

转载 作者:行者123 更新时间:2023-12-01 05:54:02 25 4
gpt4 key购买 nike

我正在创建一个包含我经常使用的一些函数的包,并且一些函数需要对其参数进行切片。我通常使用 downto我所有信号的方向,但有时信号会意外地改变它们的方向,例如,附加一个零位( sig & '0' )似乎将方向改变为正。

有没有办法独立于它们的方向对数组( std_logic_vectorunsignedsigned )进行切片?例如,您将如何实现采用最低两位的函数?我想出的唯一实现使用了一个具有预期方向的附加常量:

function take_two(x : std_logic_vector) return std_logic_vector is
constant cx : std_logic_vector(x'length-1 downto 0) := x;
begin
return cx(1 downto 0);
end function;

我也试过类似 x(x'low+1 downto x'low)但 Quartus 不喜欢这样。

最佳答案

问题实际上不在于输入,而在于所需的输出。你喜欢哪个?

如果你看看函数是如何实现的,例如 std_logic_1164-body.vhdl ,你的函数类似(在一个完整的例子中):

entity e is end entity;
library ieee;
architecture a of e is
use ieee.std_logic_1164.all;
signal test : std_logic_vector(7 downto 0) := "10010110";
signal output : std_logic_vector(2 downto 0);

function slice(s: STD_LOGIC_VECTOR; u, l : natural) return STD_LOGIC_VECTOR is
alias sv : STD_LOGIC_VECTOR (s'length-1 downto 0) is s;
variable result : STD_LOGIC_VECTOR (u downto l);
begin
for i in result'range loop
result(i) := sv(i);
end loop;
return result;
end function;
begin
output <= slice(test & '0', 5, 3); -- test becomes 'to' range.
-- output still becomes "101"
end architecture;

关于vhdl - 方向无关切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50967856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com