Process vhdl中的气泡排序
有谁能帮我在给定一组数据作为输入的情况下为冒泡排序编写VHDL代码 我已将in_数组声明为包含15个数组元素的输入。我想按降序对它们进行排序 _数组中的Process vhdl中的气泡排序,process,vhdl,Process,Vhdl,有谁能帮我在给定一组数据作为输入的情况下为冒泡排序编写VHDL代码 我已将in_数组声明为包含15个数组元素的输入。我想按降序对它们进行排序 _数组中的是输入数组。 sorted_数组是输出数组。 in_array_sig是in_array类型的信号 我在进程内面临语句问题 下面是我的代码: architecture behav of Bubblesort is signal in_array_sig : bubble; signal temp : std_logic_vector(3
是输入数组。
sorted_数组
是输出数组。
in_array_sig
是in_array类型的信号
我在进程内面临语句问题
下面是我的代码:
architecture behav of Bubblesort is
signal in_array_sig : bubble;
signal temp : std_logic_vector(3 downto 0);
signal i : integer := 0;
begin
in_array_sig <= in_array;
proc1 : process(clk, reset)
begin
if reset = '0' then
if (clk'event and clk = '1') then
while (i <= 15) loop
if (in_array_sig(i) < in_array_sig(i + 1)) then
temp <= in_array_sig(i);
in_array_sig(i) <= in_array_sig(i + 1);
in_array_sig(i + 1) <= temp;
end if;
i <= i + 1;
end loop;
end if;
end if;
end process;
sorted_array <= in_array_sig;
end behav;
Bubblesort的体系结构行为是
_阵列_sig中的信号:气泡;
信号温度:标准逻辑向量(3到0);
信号i:整数:=0;
开始
在_array _sig中,由于缺少a,因此很难给出所有阻止代码准确排序的因素的答案。这些可以按照您遇到的顺序进行描述
proc1 : process(clk, reset)
begin
if reset = '0' then
if (clk'event and clk = '1') then
while (i <= 15) loop
if (in_array_sig(i) < in_array_sig(i + 1)) then
temp <= in_array_sig(i);
in_array_sig(i) <= in_array_sig(i + 1);
in_array_sig(i + 1) <= temp;
end if;
i <= i + 1;
end loop;
end if;
end if;
end process;
连同测试台:
library ieee;
use ieee.std_logic_1164.all;
use work.array_type.all;
entity bubblesort_tb is
end entity;
architecture fum of bubblesort_tb is
signal clk: std_logic := '0';
signal reset: std_logic := '0';
signal in_array: bubble :=
(x"F", x"E", x"D", x"C", x"B", x"A", x"9", x"8",
x"7", x"6", x"5", x"4", x"3", x"2", x"1", x"0");
signal sorted_array: bubble;
begin
DUT:
entity work.bubblesort(foo)
port map (
clk => clk,
reset => reset,
in_array => in_array,
sorted_array => sorted_array
);
CLOCK:
process
begin
wait for 10 ns;
clk <= not clk;
if now > 30 ns then
wait;
end if;
end process;
end architecture;
ieee库;
使用ieee.std_logic_1164.all;
使用work.array_type.all;
实体bubblesort_tb是
终端实体;
bubblesort_tb的体系结构
信号时钟:标准逻辑:='0';
信号复位:标准逻辑:='0';
_阵列中的信号:气泡:=
(x“F”,x“E”,x“D”,x“C”,x“B”,x“A”,x“9”,x“8”,
x“7”、x“6”、x“5”、x“4”、x“3”、x“2”、x“1”、x“0”);
信号分选单元阵列:气泡;
开始
DUT:
实体工作。泡泡运动(foo)
港口地图(
时钟=>clk,
重置=>重置,
在\u数组中=>在\u数组中,
排序的数组=>排序的数组
);
时钟:
过程
开始
等待10纳秒;
时钟30纳秒
等待
如果结束;
结束过程;
终端架构;
我们得到:
一些有用的东西
reset as enable未包含在体系结构中的进程BSORT中,可以添加到带有时钟边缘条件的if语句中
在这里,我们在一篇关于描述硬件的评论中谈到了Matthew Taylor的观点
根据合成工具的不同,该过程可能作为硬件实现,也可能不作为硬件实现。如果没有,则需要中间变量来保存内部循环的每个连续迭代中使用的数组部分
还有一个问题是你在一个时钟周期内能做多少。最坏的情况是,延迟深度由15个元素比较和15个有条件交换元素对的2:2选择器组成
如果要选择与合成延迟不兼容的时钟速度,则需要重新设计实现,从软件循环模拟到跨连续时钟运行的实现
这可以很简单,通过使用enable来确定冒泡排序何时可以有效加载到已排序的数组寄存器中,从而允许更多的时钟周期。它可能更复杂,还允许使用不同的、性能更好的排序方法,或者对冒泡排序进行修改,以表示不需要检测更多的交换。由于缺少a,因此很难提供所有阻止代码进行冒泡排序的因素的答案。这些可以按照您遇到的顺序进行描述
proc1 : process(clk, reset)
begin
if reset = '0' then
if (clk'event and clk = '1') then
while (i <= 15) loop
if (in_array_sig(i) < in_array_sig(i + 1)) then
temp <= in_array_sig(i);
in_array_sig(i) <= in_array_sig(i + 1);
in_array_sig(i + 1) <= temp;
end if;
i <= i + 1;
end loop;
end if;
end if;
end process;
连同测试台:
library ieee;
use ieee.std_logic_1164.all;
use work.array_type.all;
entity bubblesort_tb is
end entity;
architecture fum of bubblesort_tb is
signal clk: std_logic := '0';
signal reset: std_logic := '0';
signal in_array: bubble :=
(x"F", x"E", x"D", x"C", x"B", x"A", x"9", x"8",
x"7", x"6", x"5", x"4", x"3", x"2", x"1", x"0");
signal sorted_array: bubble;
begin
DUT:
entity work.bubblesort(foo)
port map (
clk => clk,
reset => reset,
in_array => in_array,
sorted_array => sorted_array
);
CLOCK:
process
begin
wait for 10 ns;
clk <= not clk;
if now > 30 ns then
wait;
end if;
end process;
end architecture;
ieee库;
使用ieee.std_logic_1164.all;
使用work.array_type.all;
实体bubblesort_tb是
终端实体;
bubblesort_tb的体系结构
信号时钟:标准逻辑:='0';
信号复位:标准逻辑:='0';
_阵列中的信号:气泡:=
(x“F”,x“E”,x“D”,x“C”,x“B”,x“A”,x“9”,x“8”,
x“7”、x“6”、x“5”、x“4”、x“3”、x“2”、x“1”、x“0”);
信号分选单元阵列:气泡;
开始
DUT:
实体工作。泡泡运动(foo)
港口地图(
时钟=>clk,
重置=>重置,
在\u数组中=>在\u数组中,
排序的数组=>排序的数组
);
时钟:
过程
开始
等待10纳秒;
时钟30纳秒
等待
如果结束;
结束过程;
终端架构;
我们得到:
一些有用的东西
reset as enable未包含在体系结构中的进程BSORT中,可以添加到带有时钟边缘条件的if语句中
在这里,我们在一篇关于描述硬件的评论中谈到了Matthew Taylor的观点
根据合成工具的不同,该过程可能作为硬件实现,也可能不作为硬件实现。如果没有,则需要中间变量来保存内部循环的每个连续迭代中使用的数组部分
还有一个问题是你在一个时钟周期内能做多少。最坏的情况是,延迟深度由15个元素比较和15个有条件交换元素对的2:2选择器组成
如果要选择与合成延迟不兼容的时钟速度,则需要重新设计实现,从软件循环模拟到跨连续时钟运行的实现
这可以很简单,通过使用enable来确定冒泡排序何时可以有效加载到已排序的数组寄存器中,从而允许更多的时钟周期。它可能更复杂,还允许使用不同的、性能更好的排序方法,或者对冒泡排序进行修改,以表示不需要检测更多的掉期。“我面临问题”:请描述问题。您需要描述问题是什么,如@tramble\u jeff所说。但是,我确实看到了一个:您分配给<代码> TEMP
这行>代码> TEMP,您还需要考虑您所期望的硬件,具体地说,您需要多少个时钟周期来进行排序。MCVE可以从您的体系结构中重构,但问题描述除外:“它不工作”不是问题陈述。告诉我们预期的行为应该是什么。Matthew描述了模拟周期中信号更新的影响,请参阅。除了使temp成为流程stateme中声明的变量之外,还有其他一些事情需要更改