【发布时间】:2016-04-04 15:45:27
【问题描述】:
我要确定 4x4 矩阵中每一列的长度。每列的长度从每列的底部向上计数,并且仅从访问的初始“1”开始计数。
1110
0111
0110
0001
Column1=1、Column2=3、Column3=3、Column4=4 等等……
有人知道我该怎么做吗?到目前为止,我一直试图在一个函数旁边生成一个矩阵来提取每一列。
type col_mat is array (0 to 3) of std_logic;
type matrix is array (0 to 3, 0 to 3) of std_logic;
signal M: matrix;
signal temp_col : col_mat;
signal count : unsigned (1 downto 0):= "00";
function extract_col(x: matrix; column : integer) return col_mat is
variable ret: col_mat;
begin
for i in col_mat'range loop
ret(i) := x(i,column)
end loop;
return ret;
end function;
begin
if rising_edge(clk) then
temp_col<= extract_col(M, to_integer(count) );
count <= count+1;
end if;
end process;
【问题讨论】:
-
一行怎么会有底部和顶部?你的意思是一个专栏?您的示例文本使用从一开始的索引,但 VHDL 代码使用从零开始的索引。请检查您的问题。
-
我现在已经编辑过了。那时不是要写行
-
那么,你想找到列向量中的最高设置位位置吗?一般的方法是:1)反转向量; 2) 生成新向量并将二进制数转换为二进制补码; 3) 两个向量的逻辑与 => 给出一个热编码值,其中 1 位于 MSB 的位置。然后你可以使用一个小的LUT来获得结果。另一种选择是,由于 Matrix 相当小,因此只需将每个列向量提供给一个 LUT,该 LUT 对值进行解码。
-
函数
extract_col看起来不错。但是,给定的代码示例没有分析。另一个扫描列的函数怎么样?给你一个指针:你也可以在到达结束之前退出一个 for 循环。 -
我想找到最高设置位位置,因为我需要找到列的长度。这段代码是更广泛算法的一部分。实际的矩阵会大得多,但这只是作为示例。
标签: arrays matrix vhdl counter