首先要用matlab生成 正弦波,并且显示出来。 贴代码:
N = 256; n = 1:256; x = fix(128 + (2^7 -1) * sin(2 * pi* n/N)); fid = fopen('E:/matlab/sin.txt', 'wt'); fprintf(fid, '%x\n',x); fclose(fid); fid = fopen('I:/matlab/sin.txt','r'); for i = 1: 256 num(i) = fscanf(fid, '%x', 1); % 这句话意思是 从fid所指向的文件里,以 16进制的方式读出一个数据。 end fclose(fid); plot(num); 生成的结果:
下面 是 verilog的一些代码,在 modelsim 可以以正弦波显示出来。
initial begin $readmemh("I:/simulation/matlab/sin.txt", data_mem); $display("0x00: %h", data_mem[8'h00]); $display("0x01: %h", data_mem[8'h01]); $display("0x55: %h", data_mem[8'h55]); $display("0x56: %h", data_mem[8'h56]); reset_n = 1'b0; clk_rd = 1'b0; clock_source = 1'b0; #100000 reset_n =1'b1; end always @(posedge clk_rd or negedge reset_n) begin if (~reset_n) sine <=8'b0; else sine <= data_mem[addr]; end always @(posedge clk_rd or negedge reset_n) begin if (~reset_n) addr <=8'b0; else addr <= addr + 8'd1; end 仿真出来的结果: