Я новичок в Verilog, тут решил сделать сортировку пузырьком на этом языке. Т.к. опыта большого у меня нет, прошу покритиковать мой код в плане хардверной реализации. Можно ли сделать его проще? Меня настораживает большое кол-во конструкций if. Ввиду отсутствия возможности использования for, как сделать по-другому, не знаю.
Суть кода: есть 3х разрадный сигнал data_i, по которому в память записываются 8 чисел. Затем эти числа сортируются и так же последовательно выводятся по 3х разрядному проводу data_o. Сигнал en_i разрешает все действо. Итак, код:
Код: Выделить всё
module my_sort(
input wire clk,
input wire en_i,
input wire rst_i,
input wire [2:0] data_i,
output reg [2:0] data_o
//output reg [3:0] i, j, p
);
integer temp, i, j, p;
reg [2:0] mem [7:0];
always @ (posedge clk)
begin
if(rst_i)
begin
data_o<=0;
i<=0;
j<=0;
p<=0;
end
else
begin
if(en_i)
begin
if(i<=7)
begin
mem[i]<=data_i;
i=i+1;
j<=0;
p<=0;
end
else
begin
if((mem[j]>mem[j+1])&&(j<=7))
begin
temp=mem[j+1];
mem[j+1]=mem[j];
mem[j]=temp;
j<=0;
end
else
begin
j<=j+1;
if(j>7)
begin
data_o<=mem[p];
p=p+1;
end
end
end
end
end
end
endmodule