【小技巧】使用MATLAB产生一些重复性的verilog语句,加快verilog开发效率

        在开发FPGA过程中,经常会遇到重复性的语句需要编写,而这些重复性的语句又不是完全重复的,而是有不同的编号。这个时候直接人工编程非常麻烦,这里分享matlab自动产生verilog的方法。

close all
fs=10000000;%采样频率
%N=length(y);
N=1024;%FFT点数
size = 10 ;
freq=(0:N-1)*fs/N;%频率轴

t=linspace(0,2*pi,N);
y=sin(t)'%产生单音信号
q = quantizer('fixed', 'ceil', 'saturate', [10 8]);%量化
%q = quantizer('fixed', 'ceil', 'saturate', [12 10]);%量化
y_q=num2bin(q,y); %量化输入

fid=fopen('dds_rom.v','wt');%自动生成rom文件
fprintf(fid,'module dds_rom(CLK2,ADDR,dataout);\n');
        fprintf(fid,'input           CLK2;\n');
        fprintf(fid,'input  [9:0]   ADDR;\n');
        fprintf(fid,'output [%d:0]   dataout;\n',size-1);
        fprintf(fid,'reg    [%d:0]   dataout;\n',size-1);
        fprintf(fid,'\n');
        fprintf(fid,'always  @(posedge CLK2)\n');
        fprintf(fid,'case(ADDR)\n');
        fprintf(fid,'\n');
for j=1:N;
        i=j-1;
        fprintf(fid,'10''d%3d',i);        fprintf(fid,':');
        fprintf(fid,'dataout = #1 %d''b%s',size,y_q(j,:));
        fprintf(fid,';\n');
      
end
fprintf(fid,'endcase\n');
fprintf(fid,'endmodule');
fclose(fid);

比如这个代码,运行之后,会产生如下的verilog代码:

module dds_rom(CLK2,ADDR,dataout);
input           CLK2;
input  [9:0]   ADDR;
output [9:0]   dataout;
reg    [9:0]   dataout;

always  @(posedge CLK2)
case(ADDR)

10'd  0:dataout = #1 10'b0000000000;
10'd  1:dataout = #1 10'b0000000010;
10'd  2:dataout = #1 10'b0000000100;
10'd  3:dataout = #1 10'b0000000101;
10'd  4:dataout = #1 10'b0000000111;
10'd  5:dataout = #1 10'b0000001000;
10'd  6:dataout = #1 10'b0000001010;
10'd  7:dataout = #1 10'b0000001100;
.........................
10'd1012:dataout = #1 10'b1111101111;
10'd1013:dataout = #1 10'b1111110001;
10'd1014:dataout = #1 10'b1111110010;
10'd1015:dataout = #1 10'b1111110100;
10'd1016:dataout = #1 10'b1111110101;
10'd1017:dataout = #1 10'b1111110111;
10'd1018:dataout = #1 10'b1111111001;
10'd1019:dataout = #1 10'b1111111010;
10'd1020:dataout = #1 10'b1111111100;
10'd1021:dataout = #1 10'b1111111101;
10'd1022:dataout = #1 10'b1111111111;
10'd1023:dataout = #1 10'b0000000000;
endcase
endmodule

       这里面有1023个数据项,如果纯人工输入,非常费时间。而使用上述的matlab代码,则瞬间完成。

我们对上述的matlab做下简单的分析

 产生一个名字为dds_rom.v的verilog文件,这个地方可以根据自己需要改名字

 产生input和output接口

 这个地方,通过j循环,产生重复性的语句,即verilog的1024个数据信息

 产生结尾信息,endcase和endmodule。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值