vhdl - VHDL中的连接运算符:比较数组的元素并制作向量
问题描述
我想要做的事情如下:
我取了一个数组的几个元素,将它们与一个固定值进行比较,并尝试从中创建一个向量。
这是一段代码:
architecture behav of main_ent is
...
type f_array is array(0 to 8) of std_logic_vector(7 downto 0);
signal ins_f_array: f_array;
signal sel_sig_cmd : std_logic_vector(3 downto 0);
...
process begin
sel_sig_cmd <= ((ins_f_array(4) = x"3A")&(ins_f_array(3)= x"3A")&(ins_f_array(2)= x"3A")&(ins_f_array(1)= x"3A"));
....
end process;
...
这应该给出类似sel_sig_cmd = 1000或者可能是1011 等的东西。但这不起作用。这段代码有其他选择吗?
欢呼
塔希尔
解决方案
这是因为 VHDL 中的 = 函数返回布尔值,而不是 std_logic。在 VHDL '93 中,除了手动设置每个位之外,没有任何整洁的方法可以做到这一点:
sel_sig_cmd(3) <= '1' when (ins_f_array(4) = x"3A") else '0'
sel_sig_cmd(2) <= '1' when (ins_f_array(3) = x"3A") else '0'
-- etc
但在 VHDL 2008 中,有关系运算符 (?= ?/= 等),在比较时返回 std_logic。所以你的代码变成:
sel_sig_cmd <= ( (ins_f_array(4) ?= x"3A")
& (ins_f_array(3) ?= x"3A")
& (ins_f_array(2) ?= x"3A")
& (ins_f_array(1) ?= x"3A") );
推荐阅读
- java - Java GUI 问题:将数据存储在中心对象中
- servicestack - JSV 表单中的 HttpPost 数据
- python - 如何在 cv 中使用多个值运行 GridSearchCV
- wifi - Pepper 机器人的头部和平板可以连接不同的 SSID 吗?
- c# - 创建 FieldExpression 而不是 ConstantExpression
- azure-ad-b2c - 从 B2C 租户中的 B2C 用户获取 otherMails
- docker - 提取不在 Docker 注册表中的图像
- python - Python Glmnet Wrapper 错误,Lamda = 0
- php - 检查字符串是否后跟整数
- html - 试图使按钮居中