3ビットシリアル入力バブルソートを設計しようとしており、実際にソートするための出力を得ることができませんでした。並べ替えを行わないVHDLでの3ビットシリアル入力バブルソート
残念ながら、私はVHDLやプログラミング全般に精通していません。
私の潜在的な問題は、私がシグナルを使用して自分のプロセス内で割り当てる方法です。しかし、私はそれを修正しようとしたときにコンパイルすると、私の出力が壊れていた。
VHDLのバブルソートに関するもう1つの質問は、私がオフラインにしたいと考えた配列を使用していましたが、失敗しました。私が試みた主なことは、for i in ___ to ___ loop
プロセスでした。
以下は、私が最近使っているコードとテストベンチです。
何かアドバイスや説明をいただければ幸いです。
library ieee;
use ieee.std_logic_1164.all;
entity bubble_sort_bs is
generic (
width : integer := 3);
port (
X0, X1, X2 : in std_logic;
Y0, Y1, Y2 : out std_logic;
clk, enable : in std_logic);
end entity bubble_sort_bs;
architecture bubble_sort_bs_behav of bubble_sort_bs is
signal comb_out : std_logic;
signal inp : std_logic_vector((width-1) downto 0);
signal inp1 : std_logic_vector((width-1) downto 0);
signal inp2 : std_logic_vector((width-1) downto 0);
signal pass_in, pass_out : std_logic_vector((width-1) downto 0);
signal outp : std_logic_vector((width-1) downto 0); --trash
signal x_vector : std_logic_vector((width-1) downto 0);
begin
x_vector <= X0 & X1 & X2;
Y0 <= pass_out(2);
Y1 <= pass_out(1);
Y2 <= pass_out(0);
Output : process(all)
begin
if rising_edge(clk) then
if enable <= '1' then
inp1 <= x_vector;
inp2 <= pass_in;
end if;
end if;
if inp1 > inp2 then --x_vector
comb_out <= '1';
outp <= inp1;
pass_in <= inp2;
elsif inp2 > inp1 then --x_vector
comb_out <= '0';
outp <= inp2;
pass_in <= inp1;
----inp2 <= inp1;
elsif inp2 = inp1 then
comb_out <= '0';
outp <= inp2;
pass_in <= inp1;
end if;
pass_out <= outp;
end process Output;
end architecture bubble_sort_bs_behav;
テストベンチ:
library ieee;
use ieee.std_logic_1164.all;
entity bubble_sort_bs_tb is
end entity bubble_sort_bs_tb;
architecture tb_behav of bubble_sort_bs_tb is
component bubble_sort_bs
generic (
width : integer);
port (
X0, X1, X2 : in std_logic;
Y0, Y1, Y2 : out std_logic;
clk, enable : std_logic
);
end component;
constant bit_width : integer := 3;
signal inp, outp : std_logic_vector((bit_width-1) downto 0);
signal t_clk, t_enable : std_logic := '0';
begin
U1 : bubble_sort_bs
generic map (bit_width)
port map (
X0 => inp(0),
X1 => inp(1),
X2 => inp(2),
Y0 => outp(0),
Y1 => outp(1),
Y2 => outp(2),
clk => t_clk,
enable => t_enable
);
t_clk <= not t_clk after 5 ns;
test_process : process
begin
inp <= "001";
t_enable <= '1';
wait for 20 ns;
inp <= "100";
t_enable <= '1';
wait for 20 ns;
inp <= "111";
t_enable <= '1';
wait for 20 ns;
inp <= "000";
t_enable <= '1';
wait for 20 ns;
wait;
end process;
end tb_behav;
「一般的なプログラミングに精通していない」と言います。 VHDLはプログラミング言語ではありません_ハードウェア記述言語_です。 VHDLを書くときは、ハードウェアを設計しています。そうです、プロセスでシグナルを割り当てる方法は間違っています。しかし、実際には、あなたのコードは非常に混同されています。私はあなたが一歩踏み出してVHDL、特にコーディングスタイルを知っておくことをお勧めします。 –
私の会社のウェブサイトで[this](https://www.doulos.com/knowhow/vhdl_designers_guide/an_example_design_entity/)を読んでみてください。 「A Mix Of Use Tips」になるまで「次へ」をクリックし、少なくとも「Sequential Processes」のヒントを確認してください。 –