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