VerilogHDL正弦信号发生器

Verilog HDL正弦信号发生器

思路
😊1、计数器 (寻址)2、正弦波数据存储ROM 3 、8位AD
😊ROM只读 要新建ROM初始化文件(HEX文件&MIF文件)
😊用数据生成器,设置相关参数。(位宽8、10、12为多)
😊记事本录入数据
步骤
1、新建文件夹sint&建立一个新的工程
2、使用数据生成器生成数据,将生成的数据保存到sint文件夹中,用txt文件。
在这里插入图片描述
3打开新建好的quartus file open 刚刚存好数据的txt文件 将其save as 一下(命名sint.hex)文件类型还是txt。再次open打开这个文件sint.hex
在这里插入图片描述
还有方法二 有点big 麻烦
在这里插入图片描述
这个可以新建一下,一个个保存也可以 too too troublesome

  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是基于 FPGA Verilog HDL 制作 1k 正弦信号发生器的代码: ```verilog module sin_gen( input clk, input rst, output reg signed [15:0] sin_out ); reg [15:0] addr = 0; reg [15:0] phase = 0; reg [15:0] sin_table [0:1023]; initial begin for (int i = 0; i <= 1023; i = i + 1) begin sin_table[i] = $signed(32767 * sin(2 * 3.1415926 * i / 1024)); end end always @(posedge clk) begin if (rst) begin addr <= 0; phase <= 0; sin_out <= 0; end else begin if (addr == 1023) begin addr <= 0; end else begin addr <= addr + 1; end if (phase == 1000) begin phase <= 0; end else begin phase <= phase + 1; end sin_out <= sin_table[addr]; end end endmodule ``` 该模块包含一个时钟 `clk` 和一个重置信号 `rst`,以及一个输出信号 `sin_out`,该信号为一个有符号的 16 位数,代表正弦波的采样值。 在 `initial` 块中,我们使用 `$signed` 函数将正弦函数的值转换为有符号的 16 位数,并将其存储在 `sin_table` 数组中。该数组包含 $2^{10}=1024$ 个值,每个值代表正弦函数在一个周期内的采样值。 在 `always` 块中,我们使用 `addr` 变量来计数,从 `sin_table` 数组中依次读取每个采样值。我们还使用 `phase` 变量来计数,以确定何时输出一个采样值。当 `phase` 的值达到 $1000$ 时,我们将其重置为 $0$,并输出下一个采样值。当 `addr` 的值达到 $1023$ 时,我们将其重置为 $0$,以重新开始从 `sin_table` 数组中读取数据。 请注意,此代码中的正弦表是使用 $32767 \times \sin(\frac{2\pi i}{1024})$ 计算的,其中 $i$ 为采样点的索引。此代码假定您的 FPGA 时钟频率为 $100$ MHz,因此输出的正弦波频率为 $1000$ Hz。如果您的 FPGA 时钟频率不同,则需要相应地调整 `phase` 变量的计数器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值