VHDL 给定位数,是否有更简洁的方法来设置特定位?

标签 vhdl

给定一个位号,我试图在 std_logic_vector 中设置该位。这是为了一次切换各种时钟输出。

首先,我已经完全放弃了 sll 或 SHIFT_LEFT,这似乎是最明显的方法,但根本行不通。

variable v_cmd_clk_1: std_logic_vector(11 downto 0);

...

--- set bit number "s_proc_chan", plus 4, in v_cmd_clk_1
v_cmd_clk_1 := "0000" & "0000" & "0000";
v_cmd_clk_1( to_integer ( unsigned(s_proc_chan(2 downto 0))) + 4  ) := '1';

...
-- And then later on in the process assign it to an actual signal
cmd_clk <= v_cmd_clk_0;

是否有更好或更简洁的语法来执行此操作?

谢谢。

最佳答案

给你三个建议。第一个使用聚合:

v_cmd_clk_1 <= (to_integer(unsigned(s_proc_chan(2 downto 0)))+4) => '1', others => '0');

第二个使用整数到无符号转换:

v_cmd_clk_1 <= std_logic_vector(to_unsigned(2**(to_integer(unsigned(s_proc_chan(2 downto 0)))+4)); -- No guarantee on parentheses matching

第三个,使用shift_left:

v_cmd_clk_1 <= std_logic_vector(shift_left(resize(unsigned'("1"), v_cmd_clk_1'length), to_integer(unsigned(s_proc_chan(2 downto 0)))+4));

关于VHDL 给定位数,是否有更简洁的方法来设置特定位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29465240/

相关文章:

vhdl - 在VHDL中找到运算符 '0'的 “+”定义

testing - 如何处理代码覆盖率中的VHDL泛型

vhdl - 什么时候在 VHDL 中分配信号?

vhdl - VHDL 中的整数类型与子类型和向下与到

vhdl - 在哪里强制 xilinx ISE 使用 block 内存?

VHDL 程序

vhdl - GHDL 模拟器不支持没有错误的 vhdl 属性?

vhdl - 如何在 VHDL 中进行字符串/模式检查?

vhdl - 如何在 VHDL 中合成进程内的循环?

generics - 如何在 VHDL 2008 中创建抽象数据类型的派生类型?