FPGA查找表法sin函数的实现
- 格式:doc
- 大小:31.00 KB
- 文档页数:6
stm323950查表法例程STM32系列是一款高性能、低功耗的32位微控制器(MCU)系列,深受广大电子爱好者和专业工程师的喜爱。
在STM32系列的开发过程中,查表法(Lookup Table)是一种常用的技术,用于高效地实现一些特定的应用,如数学运算、数据转换等。
本文将介绍STM32中如何使用查表法,以及查表法的原理和实现方法。
首先,我们来了解一下查表法的原理。
查表法是一种通过查找预先存储的数据表来实现运算的方法。
一般来说,这个表是一个以问题的输入作为索引,输出作为值的二维数组。
当需要进行运算时,只需要从表中查找对应的值,而不需要进行复杂的计算过程。
这样可以大大提高程序的运行效率和节省宝贵的处理器资源。
在STM32的编程中,查表法可以应用于很多场景。
下面以两个常见的例子来说明。
第一个例子是三角函数计算。
三角函数的计算通常是比较耗费计算资源的任务,特别是在嵌入式系统中。
通过使用查表法,可以将三角函数的计算转化为查表操作,从而大大降低计算的复杂度和时间。
以求正弦函数为例,我们可以根据正弦函数的特点,生成一个固定步长的正弦函数表,表中每一项对应一个输入值。
然后,当需要求某个输入值的正弦函数值时,只需要查找对应的表项即可,而不需要进行实时的数学计算。
这样可以大幅提高计算速度,同时节省处理器的计算资源。
第二个例子是数据转换。
在嵌入式系统中,数据转换也是一个常见的任务。
例如,将模拟信号转换为数字信号,或者将一个数据域的表示方式转换为另一种表示方式等。
通过使用查表法,可以将这些复杂的转换过程转化为查表操作,提高程序的运行效率和可维护性。
在STM32的开发中,使用查表法非常简单。
首先,需要定义一个查表数组,数组的大小根据实际需要而定,通常是一个固定步长的数组。
然后,根据问题的输入值,可以通过索引来获取对应的输出值。
对于非常大的查表,可以使用哈希函数等一些技术来提高查表的速度和效率。
总结起来,STM32系列的查表法是一种高效的编程技术,可以用于实现一些复杂的运算和数据转换。
正交信号发生器的FPGA设计与仿真作者:雷能芳来源:《价值工程》2011年第24期摘要:正交信号发生器的FPGA 实现通常都是基于查找表的方法,为了达到高精度要求,需要耗费大量的ROM 资源去建立庞大的查找表。
文中提出了一种基于流水线CORDIC 算法的实现方案,可有效地节省FPGA 的硬件资源。
并根据DSP 开发工具DSP Builder的优点,采用VHDL文本与Simulink 模型图相结合的方法进行了FPGA设计,仿真结果验证了设计的正确性及可行性。
Abstract: The common approach to implement orthogonal signal generator on FPGA is based on look-up tables, which require a huge volume of ROM to achieve high resolution. This paper proposes a pipelined architecture for implementation of orthogonal signal generator on FPGA, which, based on CORDIC algorithm, can save considerable hardware resources and improve the speed performance as well. According to advantages of DSP Builder, the system is designed by utilizing VHDL and Simulink module. The correctness and feasibility of this design is verified by simulation result.关键词:CORDIC算法;FPGA;DSP Builder;正交信号Key words: CORDIC algorithm;FPGA;DSP Builder;orthogonal signal中图分类号:TP391.9文献标识码:A 文章编号:1006-4311(2011)24-0140-020引言正交信号发生器是电子技术领域中最基本的电子仪器,广泛应用于通信系统、电子对抗、电子测量、科研教学等领域。
FPGA DDS IP 核实现DDS (Direct Digital Synthesizer ),即直接数字频率合成器,本文主要介绍如何调用Xilinx 的DDS IP 核生成某一频率的Sin 和Cos 信号,以及LFM 信号。
1.相关参数的介绍及求解(1)DDS 输出频率输出频率out f 是系统时钟频率clk f 、相位累加器中相位数据位宽)(n B θ和相位增量θ∆的函数。
)(2n B clk out f f θθ∆=因此,要得到输出频率out f ,要求相位增量θ∆为clk Bout f f n )(2θθ=∆如果要采用时分复用的多个通道,则降低每个通道的有效时钟效率。
对于C 个通道,要求相位增量为clk Bout f Cf n )(2θθ=∆(2)频率分辨率频率分辨率f ∆是系统时钟频率clk f 和相位累加器数据位宽)(n B θ的函数。
)(2n B clk f f θ=∆对于时分复用的多通道,频率分辨率随通道数的增加而提高,对于C 个通道:Cf f n B clk )(2θ=∆(3)相位增量相位增量值是无符号的,当相位增量值与相位位宽匹配时,也可以将其看作有符号数。
假设相位增量和相位数据位宽均为N ,如果看成无符号数,范围由0到N 2表示的是(] 3600,的角度范围;如果看成有符号数,则范围变成)1(2--N 到)1(2-N ,相位表示的是[) 180180,-的角度范围。
根据正弦信号的周期性和对称性,两种表示范围内的信号采样是一致的。
相位增量定义了综合其的输出频率。
相位增量是系统时钟频率clk f 、输出频率out f 和相位数据位宽)(n B θ的函数。
clk B out f f n )(2θθ=∆2.线性调频信号线性调频信号的时间函数表达式可表示为2,2[)],2(exp[)(20T T t Kt t f j t s -∈+=ππ其瞬时频率为]2,2[,)(21)(0T T t Kt f t dt d t f -∈+==ϕπ其中,TB K =,B 为信号调频宽度,T 为信号脉宽。
fpga 对数运算
FPGA(现场可编程门阵列)是一种可编程逻辑设备,可用于实现各种数字电路功能。
对于对数运算,在FPGA中可以使用不同的方法进行实现,具体取决于需求和设计约束。
一种常见的方法是通过查找表(Look-Up Table, LUT)实现对数运算。
LUT是FPGA中最基本的元素,可以存储和查找预先计算好的函数值。
通过在LUT中存储预先计算好的对数函数值,并通过输入信号的取值索引相应的输出值,可以实现对数运算。
另一种方法是使用近似算法进行对数运算。
在FPGA中可以使用多项式逼近、级数展开等方法来近似计算对数函数。
这种方法可以提供较高的计算精度,但同时也会引入一定的计算误差。
需要注意的是,在设计FPGA的对数运算模块时,需要考虑计算延迟、资源占用和精度等因素。
根据具体要求和限制,可以选择合适的实现方法来实现对数运算。
excel中sin 函数Sin函数是数学中常见的一种三角函数,它在Excel中也有着广泛的应用。
Sin函数的全称是正弦函数,它表示一个角的正弦值。
在Excel中,我们可以使用Sin函数来计算角度的正弦值。
在Excel中,Sin函数的使用方法非常简单。
我们只需要在一个单元格中输入“=SIN(角度)”即可,其中“角度”是我们要计算正弦值的角度。
例如,如果要计算30度的正弦值,我们可以在一个单元格中输入“=SIN(30)”,然后按下回车键即可得到结果。
Sin函数的返回值是一个介于-1和1之间的数值。
正弦函数的图像是一条波浪线,它在0度、180度、360度等角度处的值为0,在90度、270度等角度处的值为1或-1。
通过使用Sin函数,我们可以计算任意角度的正弦值,从而进行各种数学运算和数据分析。
除了计算正弦值,Sin函数在Excel中还有其他一些常见的用途。
例如,我们可以使用Sin函数来生成波形图或周期性数据。
通过调整Sin函数中的角度参数,我们可以改变波形的形状和周期。
这在一些科学实验、信号处理和音频分析等领域非常有用。
在Excel中,Sin函数还可以与其他函数进行组合使用,实现更复杂的计算。
例如,我们可以将Sin函数的返回值作为其他函数的参数,从而实现更加灵活的计算。
这种组合使用可以帮助我们解决一些复杂的数学问题,提高工作效率和准确性。
在使用Sin函数时,我们需要注意一些常见的问题。
首先,角度参数需要使用弧度制而不是角度制。
如果我们要计算角度为30度的正弦值,需要将30度转换为弧度,然后再作为参数传入Sin函数中。
其次,Sin函数在计算时可能会出现一些舍入误差,这是由于计算机浮点数的精度限制所导致的。
因此,在进行精确计算时,我们需要注意误差的影响。
Sin函数是Excel中非常有用的一个函数,它可以帮助我们计算角度的正弦值,并在各种数学运算和数据分析中发挥重要作用。
通过合理利用Sin函数,我们可以更好地处理数学问题,提高工作效率和准确性。
正弦波的产⽣ 最近的⼀个项⽬,和正弦波息息相关。
因此,我总结了⼀下⽹上关于产⽣正弦波的⼏种⽅法。
若有幸被⼤家看到,欢迎⼤家补充。
(1)递推法 假设数字⾓频率w,这我们要取的正弦波的点⼀次为sin(w*0),sin(w*1),sin(w*2)...sin(w*(n-1)),sin(wn)... sin(wn) =sin(w(n-1)+w) =sin(w(n-1))*cos(w)+cos(w(n-1))*sin(w) =sin(w(n-1))*cos(w)+[sin(nw)-sin(wn-2w)]/2 sin(wn)=2*cos(w)*sin(w(n-1))-sin(w(n-2)); 给出任意相邻两个sin(wn)的值,既可以计算下⼀个正弦波的幅度值。
通过改变不同的初始值(相位),我们可以得到正弦或余弦波。
此⽅法中,cos(w)为常数,可以通过(固定系数乘法)加法实现。
所需资源⾮常少,稳定性⾼,误差⼩,但注意w的精度。
易于⽤软件实现。
(2)系统函数法 在滤波器章节中,有⼏种特殊的滤波器,其中⼀种就是正弦波发⽣器。
已知正弦波的的系统函数为: H(z)=sin(w)*z-1/(1-2*cos(w)*z-1+z-2);余弦波系统函数类似; 由此可以画出正弦波发⽣器(滤波器)的结构图。
易于FPGA和CPU实现。
其中Z表延迟单元,sin(w)和cos(w)都为常数。
结构简单,只⽤加法器或固定系数的乘法器实现,稍稍改动可同时产⽣正余弦波。
(3)cordic⽅法 强⼤的cordic,可以轻松计算包括开⽅,取模,正余弦等多种运算的神级算法。
推荐使⽤,精度最⾼。
逻辑较上⾯两种多。
cordic配置:旋转模式,x为幅度,y为0,,z为相位。
(4)查表法 将正弦波的幅度预先存⼊rom中,通过相位累加器产⽣rom读地址。
实现中要消耗⼀定量的存储器资源。
优点是精度⾼,实现简单,可以实现很多种类型的周期信号。
LMS的FPGA实现之说明文档一、LMS模块的输入/输出接口:PORT (waveIN : OUT std_logic_vector(7 DOWNTO 0);--输入单频正弦波waveOut : OUT std_logic_vector(7 DOWNTO 0);--利用本地数字cos/sin表所产生的用于跟踪输入的正弦波eOut : OUT std_logic_vector(7 DOWNTO 0);--利用LMS算法对系数进行调整所需的误差信号start : IN std_logic;--开始对输入进行跟踪的启动信号(Active High)CLK : IN std_logic);二、LMS的原理:LMS算法是利用最陡下降法原理,使原始输入与参考输入的均方误差最小来求最佳权矢量的一个简单而有效的递推方法。
图1所示的是有两个自动加权的、单频的自适应滤波器。
原始输入为ω0的单频信号,设参考输入为一纯余弦波Ccos(ω0t+φ),参考输入x1(n)与x2(n)之间存在90°相移,即:x1(n)=Ccos(ω0nT+φ)x2(n)=Csin(ω0nT+φ)(1)图1 自适应单频跟踪器(SFT)它们通过相关抵消回路以最小均方误差控制着滤波权值x2(n)和w2(n),滤波器输出y(n)即为跟踪后的单频输出。
LMS算法迭代加权公式为[2]:w1(n+1)=w1(n)+2μe(n)x1(n) (2)其中μ是控制稳定性和收敛速率的因子。
e(n)=d(n)-y(n) (3)由式(1)、(2)、(3)组成了LMS算法。
这种算法对于每一个输入样本,只需要对其进行迭代运算,因此该算法易于用FPGA/DSP实时实现系统。
三、LMS的FPGA实现:结构设计总的算法流程:err = waveIN – waveOut; (注:设计中waveIN由costest模块产生)wCos = wCos + μ*err; wSin = wSin + μ*err;Qcos = wCos*CosOut; Qsin = wSin*SinOut;waveOut = Qcos + Qsin;模块(一) GenerateTHETA在Start信号为‘1’后,每个时钟周期上升沿将THETA(costest IP Core 的输入)与sTHETA(cosfunc IP Core 的输入)加1,这样costest/cosfunc就可以在下一个周期输出对应的sin或是cos值(此两个IP Core的详细资料可以参见工程目录下的sincos.pdf)。
基于FPGA 的简易信号发生器设计与实现作者:吕兆承李营全桂英沈晓波陈帅来源:《江苏科技信息》 2018年第21期摘要:基于FPGA技术,文章认为采用Verilog语言在Altera公司的Cyclone IV系列器件上实现了一个简易信号发生器。
该系统可产生正弦波、方波、三角波和锯齿波4种波形信号,可实现频率调整。
通过SignalTap II对系统输出波形进行实时测试,验证设计的正确性。
该信号发生器具有简单、可靠、精度高、可移植性好等特点。
关键词:信号发生器;Verilog HDL;FPGA中图分类号:TN741 文献标识码:A0 引言信号发生器作为简易的信号源,用于产生测试信号,在教学、科研、工业等领域中有着广泛的应用。
传统的信号发生器是使用模拟电路或者专用芯片搭建而成,存在连线复杂,稳定性较差,且不易扩展和调试等缺陷[1]。
以现场可编程逻辑门阵列(FieldProgrammable Gate Array,FPGA)技术为核心的信号发生器的设计实现,提高了系统可靠性,实现了系统信息实时快速测量,使得信号发生器电路更加简单和精确[2-3]。
1 波形产生原理基于FPGA的信号发生器采用直接数字合成技术(Direct Digital Synthesis,DDS)实现波形的数字化处理,它按一定的相位间隔,将产生的波形幅度的二进制数据存储于高速存储器(ROM),用参考频率源作为时钟,从ROM中取出波形数据,在通过D/A转换和滤波电路便可得到模拟波形[4-5]。
该方法的主要优点是输出相位连续、相对带宽较大、频率分辨率很高、可编程,准确度和稳定度都比较高。
如图1所示,简易信号发生器设计核心部分由计数器构成的地址信号发生器和存储波形数据器ROM组成。
波形存储器ROM存储着发生器的波形数据,包括正弦波、三角波、方波和锯齿波波形数据。
在时钟脉冲作用下,将计数器输出作为波形存储器的寻址地址,读取ROM中存放的波形数据并送往外围器件,从而得到连续的波形。
sin函数计算算法数学中有很多经典的函数,而其中一种非常重要且广泛使用的函数就是sin函数。
sin函数在几何学、物理学、工程学以及计算机科学等领域都扮演着重要的角色。
本文将详细介绍sin函数的计算算法,以及它的应用和意义。
首先,让我们来了解sin函数的定义。
sin函数是一个周期性函数,其定义域为实数集,值域为[-1, 1]。
它与单位圆上的角度的正弦值相对应。
sin函数的图像呈现出周期性的波动,形状像是一条连续的波浪线。
计算sin函数的算法有多种,其中最常见的是泰勒级数展开法。
根据数学原理,我们可以将任意函数表示为幂级数的形式。
sin函数可以通过泰勒级数展开为以下形式:sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...其中,x为自变量,阶乘(n!)表示n的阶乘,也就是n! = n * (n-1) * (n-2) * ... * 2 * 1。
通过展开sin函数的泰勒级数,我们可以使用有限个项的求和来近似计算sin函数的值。
这在计算机中非常有用,因为计算机可以通过有限的计算资源来迅速计算得到sin函数的近似值。
然而,使用泰勒级数展开计算sin函数的效率不高。
为了提高计算速度,我们可以使用其他近似算法,如查表法。
查表法将sin函数的值预先计算存储在一个查找表中,然后根据输入的角度查找对应的sin值。
这种方法会显著提高计算速度,但需要牺牲一定的存储空间。
除了计算sin函数的值,它在实际应用中也起到了非常重要的作用。
在几何学中,我们可以使用sin函数来计算三角形的各种属性,如边长、角度和面积。
在物理学中,sin函数可以用来描述周期性运动,如振动和波动。
在工程学和计算机科学中,sin函数常被用来处理信号和图像,如图像压缩、音频处理和信号滤波。
通过计算sin函数的值,我们可以研究和分析周期性现象,从而揭示自然界和人类行为背后的规律和模式。
同时,sin函数的计算算法也推动了计算机科学和工程学的发展,为我们解决各种实际问题提供了重要的数学工具。
sin函数的使用方法sin函数是数学中常见的一种三角函数,它在计算机科学、物理、工程等领域都有广泛的应用。
在本文中,我们将介绍sin函数的使用方法,并探讨它在实际问题中的应用。
我们来了解一下sin函数的定义。
sin函数是以角度作为自变量,输出一个值在-1到1之间的函数。
它的图像是一个周期性变化的曲线,具有一些特点,比如对称性、周期性等。
在使用sin函数时,我们需要注意一些重要的细节。
首先,角度的单位通常是弧度,而非度数。
弧度是一个无单位的量,表示角度的大小。
我们可以通过将角度乘以π/180来将其转换为弧度。
例如,30度等于π/6弧度。
sin函数的计算可以通过数学库或计算器来完成。
在大多数编程语言中,都提供了sin函数的库函数。
我们可以通过调用这些函数来计算sin值。
例如,在Python中,我们可以使用math库中的sin函数来计算sin值。
sin函数的应用非常广泛。
它在几何学中用于计算三角形的各种属性,如角度、边长和面积等。
在物理学中,sin函数常用于描述周期性现象,比如振动和波动等。
在工程领域,sin函数常用于电路分析和信号处理等方面。
除了基本的sin函数,我们还可以使用一些相关的函数来扩展其功能。
例如,cos函数表示角度的余弦值,tan函数表示角度的正切值。
这些函数在实际问题中也有重要的应用。
在实际问题中,我们经常需要使用sin函数来解决一些复杂的计算问题。
例如,我们可以使用sin函数来模拟天体运动、计算物体的运动轨迹等。
另外,sin函数还可以用于信号处理中的滤波、音频合成和图形处理等方面。
总结一下,sin函数是一种常见的三角函数,用于描述角度和周期性现象。
在使用sin函数时,我们需要注意角度单位和函数的计算方法。
sin函数在数学、物理和工程等领域有着广泛的应用。
通过掌握sin函数的使用方法,我们可以解决一些实际问题,并深入理解数学和科学的本质。
实验一 Sin(x)函数的计算
一、实验要求
1、系统可以根据输入的角度(或弧度)x,显示相应的sin(x)数值,保证角
度精度≤0.1度。
2、编辑测试激励文件,进行相关测试,注意测试的完备性。
3、根据DE2板资源,设计下载测试方案,并且完成硬件下载测试。
二、实验方案
本实验要求用FPGA实现角度(0度~360度)的Sin函数的计算,角度的分
辨率小于等于0.1度。考虑到实现的简便性,本实验采用查表法实现Sin函数的
计算。首先我们用Matlab计算出Sin函数值,然后生成.mif文件。用Matlab生
成的.mif文件在Quartus中配置FPGA的Rom。跟具输入的角度值得到其Sin函
数值存储的Rom地址,然后根据地址取出Rom中存储的Sin函数值,最后显示
在数码管上,从而实现Sin函数的计算。
三、实验过程及代码
1. Matlab中.mif文件的生成
由于输入的角度值为0度~360度,所以计算出的Sin函数值至少有3600个,
但由于Sin函数值的对称性,所以实际上存储在FPGA的Rom中的值只需要900
个。因此在Matlab中我们设置depth=1024,在这里我们对Sin函数值做了扩大
10000倍后四舍五入取整的处理,以便于在Rom中存储,所以在这里我们设置
width=14。Matlab中的程序如下:
clear all;
close all;
clc;
t=[0:0.1:90]; %角度
x=pi*t/180; %弧度数
sin_val=sin(x); %sin函数值
fid=fopen('sine.mif','wt'); %以wt格式打开文件sine.mif
fprintf(fid,'width=14;\r\n'); %设置width=14
fprintf(fid,'depth=1024;\n'); %设置depth=1024
fprintf(fid,'address_radix=uns;\n');
fprintf(fid,'data_radix=dec;\n');
fprintf(fid,'content begin\n');
for j=1:901
i=j-1;
fprintf(fid,'%d:% d;\n',i,round(sin_val(j)*10000));
end
fprintf(fid,'end;\n');
fclose(fid);
然后利用宏功能模块编制LPM_ROM存放上面的数据,取名sin_rom.v,用
上面编写的sine.mif初始化这个模块,自动生成的Verilog代码。
2、顶层模块
顶层模块采用
Verilog HDL语言编写,保存为sinx.v。输入信号包括一个时钟信号clk,
一个复位信号rst_n,一个9位的输入角度的整数部分a,一个4位的输入角度的小数部分b,
输出信号包括6个7位的数码管显示信号。
由于在Rom中只存储了900个Sin函数值,
所以需要对输入的角度进行转换,然后根据转换后的地址对Rom寻址,得在其
函数值,在顶层模块中对得到的函数值进行为的的分离,得到函数值的每一位,
用于数码管的显示。
代码如下:
module sinx(clk,rst_n,a,b,hex0,hex1,hex2,hex3,hex4,hex5);
input clk,rst_n;
input [8:0] a;
input [3:0] b;
output [6:0] hex0,hex1,hex2,hex3,hex4,hex5;
reg [3:0] data1,data2,data3,data4,data5;
wire [3:0] data0;
wire [13:0] q;
wire [9:0] addr;
reg [13:0] qr;
jiaodu U(
.clk(clk),
.a(a),
.b(b),
.addr(addr),
.fh(data0)
);
sin_rom sin_rom_inst (
.address ( addr ),
.clock ( clk ),
.q ( q )
);
reg [2:0] num;
always @(posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
num <=3'd0;
qr <=14'd0;
end
else
begin
qr <= q;
num <= num+1'b1;
case(num)
3'd1 : data1 <=qr%4'd10;
3'd2 : data2 <=(qr/4'd10)%4'd10;
3'd3 : data3 <=(qr/8'd100)%4'd10;
3'd4 : data4 <=(qr/10'd1000)%4'd10;
3'd5 : data5 <=(qr/10'd10000);
default : ;
endcase
if(num ==3'd6) num <=3'd0;
end
end
led led0(rst_n,data0,hex0);
led led1(rst_n,data1,hex1);
led led2(rst_n,data2,hex2);
led led3(rst_n,data3,hex3);
led led4(rst_n,data4,hex4);
led led5(rst_n,data5,hex5);
endmodule
3、输入角度的转换
由于在Rom中只存储了900个Sin函数值,所以需要对输入的角度根据其
所在的象限得到其Sin函数值的Rom地址,同时给出Sin函数值的符号。在这
里输入的角度值分为整数和小数部分,整数部分从0~360共360个值,所以在这
里输入的整数部分a定义9位,用9个开关输入。小数部分从0~9共10个值,
在这里输入的小数部分b定义4位,用4个开关输入。程序中addr是Sin函数
值2的储存地址,fh代表的函数值的符号。
module jiaodu(clk,a,b,addr,fh);
input clk;
input [8:0] a;
input [3:0] b;
output [9:0] addr;
output [3:0] fh;
reg [3:0] fh;
reg [9:0] addr;
reg [12:0] c;
always @(posedge clk )
begin
c <= a*4'd10+b;
if (2700< c <=3600)
begin
addr <= 3600-c;
fh <=4'ha;
end
else if(1800< c <=2700)
begin
addr <= c-1800;
fh <=4'ha;
end
else if (900< c <=1800)
begin
addr <=1800-c;
fh <=4'hb;
end
else
begin
addr <=c;
fh <=4'hb;
end
end
endmodule
4、数码管显示
根据输入的data_in的值别对sm_db赋值用于数码管的显示。
module led( rst_n,data_in,sm_db);
input rst_n;
input[3:0] data_in;
output[6:0] sm_db;
reg[6:0] sm_db;
always @ (data_in or rst_n)
begin
if(!rst_n)
sm_db <= 7'b1000000;
else
begin
case (data_in)
4'h0: sm_db <= 7'b1000000;
4'h1: sm_db <= 7'b1111001;
4'h2: sm_db <= 7'b0100100;
4'h3: sm_db <= 7'b0110000;
4'h4: sm_db <= 7'b0011001;
4'h5: sm_db <= 7'b0010010;
4'h6: sm_db <= 7'b0000010;
4'h7: sm_db <= 7'b1111000;
4'h8: sm_db <= 7'b0000000;
4'h9: sm_db <= 7'b0011000;
4'ha: sm_db <= 7'b0111111;
4'hb: sm_db <= 7'b1111111;
default: ;
endcase
end
end
endmodule
四、实验体会
通过此次实验,我系统的了解了FPGA系统设计的全过程。学会了用verilog
语言描述电路,学会了利用宏功能模块编制LPM_ROM存放数据,并用编写
的.mif文件初始化这个模块。在这过程中我遇到了一些问题,但通过努力解决了。
这让我明白了我们要有随时面对突发问题的心理准备。