Verilog学习笔记——分频器
分频器应该是verilog里最常用的一个模块了,原理也很简单,就是设置一个计数器,设置在计到指定的分频数的一半后反转输出波的电平,以实现指定数目的分频,以下是一个100,000分频的例子:(这个模块本来是用于将一个100mHz的晶振信号转化为周期为1ms的信号) module ms_clk( input clk_100mhz, //输入时钟信号100mHz output reg clk_ms ); [...]
分频器应该是verilog里最常用的一个模块了,原理也很简单,就是设置一个计数器,设置在计到指定的分频数的一半后反转输出波的电平,以实现指定数目的分频,以下是一个100,000分频的例子:(这个模块本来是用于将一个100mHz的晶振信号转化为周期为1ms的信号) module ms_clk( input clk_100mhz, //输入时钟信号100mHz output reg clk_ms ); [...]
咕咕咕了很久,终于想到要来写第二篇学习笔记了……这次的实验目的是使用DAC0832来产生自定义波形。 概述 首先是这次要用到的两个器件:DAC0832和TL084,通过由这两个器件组成的电路我们就可以达到将数字信号转换为模拟信号的目的,来看一下电路图: 图上标注为DAC0830,这两款芯片使用方式相同 对于电路图的连接不再做过多赘述。我使用了DAC0830的直通模式来进行实验因为这样最方便。在正确连接的情况下,FPGA所需要做的就只是按照预期的波形输出对应的电压值。不过要注意的是,DAC0832的反应时间约为1 μs,所以如果你给的数值变化速度高于了这个值,那可能无法看到波形正确显示。不过以这个模块的精度,我想也完全用不上这么精确的波形输入…… 接下来就进入最关键的部分:通过FPGA输出波形数值给DAC0830。因为我希望能够输出一个可调的波形,所以我将使用ROM来存储希望显示的波形,存储方式就是在一个波形上等间距地取一定数量的点,然后将这些点按顺序保存到ROM中,这样就只需通过固定频率的时钟按顺序读出这些点,就可以输出我们想要的波形了。当然,这种做法所输出的波形一定是会有失真的,所取的点越密集所产生的失真也越小。同样波形的精确度还受器件以及电路等多种因素的影响,所以想做一个高精度的波形发生器也是件很麻烦的事情…… 正片 1.配置ROM 那么接下来就开始正式编写模块了,首先要做的就是将ROM加入工程中。ROM可以直接调用Vivado中的IP,做法很简单,在左侧工具栏选择IP [...]
好久不见,我又回来开新坑了。老挖坑人了。 这学期开始接触数电了,感觉比模电好玩多了模电是什么废物玩意,而且因为数电极强的逻辑性以及又fpga这种可编程器件的存在,所以我觉得数电比模电更容易上手,而事实也是现在数电的发展远比模电强大。 闲话不多说,接下来我来介绍一下我设计的电子钟模块,它通过输入一个1Hz的时钟信号来达到计秒的功能,并且具有校准时、分、秒以及清零的功能。具体的实现方法是在内部设置了两套存储器,一套用于存储时钟信号计算的秒数,另一套用于存储用户自定义的校准时间,然后将两套存储相加即可输出最后的时分秒信号。 原理非常简单,算是我学习Verillog以来做的第一个模块了吧,接下来贴出代码:(添加了代码注释) module clock( input clk,h_ad,m_ad,s_ad,res, //输入clk为1Hz output [...]