Я пытаюсь создать кольцевую топологию для многоскоростной шины данных.Я не понимаю, как получить выходные данные на узле в зависимости от приоритета пакетов данных.Предположим, я хочу получить пакеты от узла в кольце.Я хочу получать пакеты в зависимости от их приоритета.Может ли кто-нибудь помочь мне, как написать код verilog для этой вещи.Я попытался написать вложенное условие if else, как показано ниже.
module demux0(
input clock,
input reset,
input [43:0]in,
output reg [43:0]out0,
output reg [43:0]out1
);
always @(posedge clock)
begin
if(reset)
begin
out0<=0;
out1<=0;
end
else if(in[3:0]==4'b0000 && in[13:4]==10'b0000000001) //so nested if else to gain the priority
begin
out1<=in; //so the packet with the highest priority goes to the output
if(in[3:0]==4'b0000 && in[13:4]==10'b0000000010) //check the second priority packet
begin
out1<=in;
if(in[3:0]==4'b0000 && in[13:4]==10'b0000000100)
begin
out1<=in;
if(in[3:0]==4'b0000 && in[13:4]==10'b0000001000)
begin
out1<=in;
end
end
end
end
else
begin
out0<=in;
end
end
endmodule
Итак, вот демультиплексор, который выбирает вывод 1, если входные биты в [3: 0] и в [13: 4] совпадают, иначе вывод 0выбран.Но проблема с этим кодом состоит в том, что кольцо синхронизировано, поэтому, если за один такт я получу свой пакет с наивысшим приоритетом, который составляет 10'b0000000001, и после 3 тактов я получу свой второй по приоритету пакет, который здесь равен 10'b0000000010, тогда мойВложенный, если еще цикл не собирается выполняться.Может кто-нибудь сказать мне, как мне это сделать?