Отправка сигнала с использованием регистров AXI с Verilog - PullRequest
0 голосов
/ 11 апреля 2019

Мне нужно отправить сигнал с помощью доски, которая включает в себя Zynq. Я создал пользовательское периферийное устройство AXI с несколькими выходными портами, которые я определил так:

 output reg clk_out,
 output reg signal_1,
 output reg signal_2,
 output reg signal_3,
 ...other signals

Каждый сигнал состоит из 88 битов, и по этой причине мне нужно использовать для каждого сигнала как минимум 3 разных регистра AXI (каждый регистр AXI является 32-разрядным). Теперь я хочу отправить сигналы (с тактовой частотой 1 МГц) в соответствии с данными, которые, если они найдены в трех ведомых регистрах AXI, которые я заполняю из программы на C на PetaLinux. Для этого я создал цикл «всегда» следующим образом:

reg init=1;
reg [$clog2(88)-1:0] count = 0;

always@(posedge clk_1MHz) begin
   if(init==1) begin
        init<=0;
        count<=0;
        clk_out<=0;
        signal_1<=0;
        signal_2<=0;
        signal_3<=0;
        ...
   end else begin
     if(clk_out==0)begin
       if(count<32)begin 
          signal_1=slv_reg0[count];
          signal_2=slv_reg3[count];
          signal_3=slv_reg6[count];
          ...
       end else if (count<64) begin
          signal_1=slv_reg1[count-32];
          signal_2=slv_reg4[count-32];
          signal_3=slv_reg7[count-32];
          ...
       end else if (count<88) begin
          signal_1=slv_reg2[count-64];
          signal_2=slv_reg5[count-64];
          signal_3=slv_reg8[count-64];
          ...
       end
     count=count+1;
     clk_out=~clk_out;
   end

Сигналы должны отправляться синхронно. И практически код работает "вполне" хорошо. Мой вопрос: есть ли лучшие практики для того, чтобы делать то, что я должен делать? Второй вопрос: поскольку у меня всего 48 сигналов, должен ли я использовать оператор <=? </p>

...