使用带有Verilog的AXI寄存器发送信号

时间:2019-04-11 09:39:07

标签: verilog hdl vivado zynq

我需要使用包含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位)。 现在,我想根据数据发送信号(时钟为1MHz),如果该数据位于我从PetaLinux上的C程序填充的三个AXI从寄存器中。为此,我创建了一个“ always”循环,如下所示:

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个信号,我应该使用'<='运算符吗?

0 个答案:

没有答案