草庐IT

广工计组实验f3正弦波发生器

low泡程序员 2023-08-16 原文

实验目标:

本次实验的任务是设计一个正弦信号发生器,并且熟悉Quartus软件中软件功能自模块设计的使用,以软件中自带的ROM模块设计正弦信号发生器。

设计原理:

 

ROM数据:

 

LPM_ROM设计

实验代码:

LIBRARY IEEE;  --正弦信号发生器源文件

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY SINGT IS

    PORT ( CLK  : IN STD_LOGIC;              --信号源时钟

            DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );--8位波形数据输出

END;

ARCHITECTURE DACC OF SINGT IS

COMPONENT data_rom --调用波形数据存储器LPM_ROM文件:data_rom.vhd声明

   PORT(address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);--6位地址信号

    inclock : IN STD_LOGIC ;--地址锁存时钟

           q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );

END COMPONENT;

SIGNAL Q1 : STD_LOGIC_VECTOR (5 DOWNTO 0); --设定内部节点作为地址计数器

    BEGIN

PROCESS(CLK )                           --LPM_ROM地址发生器进程

    BEGIN

IF CLK'EVENT AND CLK = '1' THEN  Q1<=Q1+1; --Q1作为地址发生器计数器

END IF;

END PROCESS;

u1 : data_rom PORT MAP(address=>Q1, q => DOUT,inclock=>CLK);--例化

END; 

rom.mif文件

LIBRARY ieee;

USE ieee.std_logic_1164.all;

LIBRARY altera_mf;

USE altera_mf.altera_mf_components.all;    --使用宏功能库中的所有元件

ENTITY data_rom IS

PORT (address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);

             inclock          : IN STD_LOGIC ;

             q                : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );

END data_rom;

ARCHITECTURE SYN OF data_rom IS

SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);

COMPONENT altsyncram --例化altsyncram元件,调用了LPM模块altsyncram

GENERIC (                               --参数传递语句

              intended_device_family  : STRING; --类属参量数据类型定义

              width_a                 : NATURAL;

             widthad_a         : NATURAL;

             numwords_a               : NATURAL;

             operation_mode           : STRING;

      outdata_reg_a         : STRING;

             address_aclr_a         : STRING;

outdata_aclr_a         : STRING;

             width_byteena_a         : NATURAL;

 init_file : STRING;

   lpm_hint        : STRING;

lpm_type : STRING );

PORT ( clock0 : IN STD_LOGIC ;            --altsyncram元件接口声明

address_a: IN STD_LOGIC_VECTOR (5 DOWNTO 0);

q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );

END COMPONENT;

BEGIN

q    <= sub_wire0(7 DOWNTO 0);

altsyncram_component : altsyncram

GENERIC MAP ( intended_device_family => "Cyclone", --参数传递映射

width_a => 8,                              --数据线宽度8

widthad_a => 6,                            --地址线宽度6

numwords_a => 64,                          --数据数量64

operation_mode => "ROM",                   --LPM模式ROM

outdata_reg_a => "UNREGISTERED",           --输出无锁存

address_aclr_a => "NONE",                  --无异步地址清0

outdata_aclr_a => "NONE",                --无输出锁存异步清0

width_byteena_a => 1,               -- byteena_a输入口宽度1

init_file => "D:\USER\intelFPGA2\test\SINGT\rom.mif", --ROM初始化数据文件,此处已修改过

lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=NONE", 

lpm_type => "altsyncram" )                     --LPM类型

PORT MAP (clock0 => inclock, address_a => address,q_a => sub_wire0 );

END SYN;

原件图:

实验结果波形图:

第一组

第二组

实验心得总结:

本次实验做的是正弦波信号发生器,输出仿真波形。在本次实验中除了要设计VHDL文件以外,还有.bdf .mif文件,再写VHDL时,要注意文件路径不能写错。

有关广工计组实验f3正弦波发生器的更多相关文章

  1. ruby-on-rails - 启用 Rack::Deflater 时 ETag 发生变化 - 2

    在启用Rack::Deflater来gzip我的响应主体时偶然发现了一些奇怪的东西。也许我遗漏了一些东西,但启用此功能后,响应被压缩,但是资源的ETag在每个请求上都会发生变化。这会强制应用程序每次都响应,而不是发送304。这在没有启用Rack::Deflater的情况下有效,我已经验证页面源没有改变。我正在运行一个使用thin作为Web服务器的Rails应用程序。Gemfile.lockhttps://gist.github.com/2510816有没有什么方法可以让我从Rack中间件获得更多的输出,这样我就可以看到发生了什么?提前致谢。 最佳答案

  2. ruby - 当 attr_accessor 在类方法中时会发生什么? - 2

    所以我想到了这个,想知道当下面的一些事情完成后会发生什么。classTestdefself.abcattr_accessor:Johnendendobject=Test.newputs"beforecallingclassmethodabc:#{object.class.instance_methods(false)}"Test.abcputs"aftercallingclassmethodabc:#{object.class.instance_methods(false)}"这里我检查的是,getter和setter方法是否以这种方式创建。如果是这样,是那些实例方法或类方法。首先我创

  3. ruby - 当你有一个没有参数的 case 语句并且 when 子句是 lambda 时会发生什么? - 2

    这段代码没有像我预期的那样执行:casewhen->{false}then"why?"else"ThisiswhatIexpect"end#=>"why?"这也不是casewhen->(x){false}then"why?"else"ThisiswhatIexpect"end#=>"why?"第一个then子句在两种情况下都被执行,这意味着我提供给when子句的lambda没有被调用。我知道无论when子句的主题是什么,都应该调用大小写相等运算符===。我想知道当没有为case提供参数时,===的另一边会发生什么。我在想它可能是nil,但它不可能是:->{false}===nil#=>

  4. ruby-on-rails - 获取最近发生的星期三? - 2

    如何使用Ruby(和Rails,如果有相关的辅助方法)获取最近发生的星期三?最终需要实际日期(5/1/2013)。 最佳答案 time=Time.nowdays_to_go_back=(time.wday+4)%7last_wed=days_to_go_back.days.ago 关于ruby-on-rails-获取最近发生的星期三?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions

  5. ruby-on-rails - 发生异常时发送电子邮件不起作用,使用 exception_notification - 2

    我正在从rails2.3迁移到rails3.1,我试图在生成异常时发送电子邮件。我正在使用exception_notificationgem。我的其余电子邮件都在工作。但是异常邮件不会被解雇。以下是我的staging.rb文件中的设置。config.action_mailer.perform_deliveries=trueconfig.action_mailer.raise_delivery_errors=true下面是application.rb中的代码C::Application.config.middleware.useExceptionNotification::Rack,:e

  6. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  7. 一个非常明显的现象,正在发生——元宇宙正在被越来越多的人所推崇 - 2

      一个非常明显的现象,正在发生——元宇宙正在被越来越多的人所推崇,无论是科技巨头,还是资本巨头,几乎都是如此。同时,区块链则正在一点一点地回归理性与客观。对于区块链来讲,这是一个好现象。它告诉我们,人们对于区块链的狂热而激进的认识,正在被一步又一步的校正和纠偏。由此,区块链行业的发展,将会真正进入到一个全新的发展阶段。  同以往人们仅仅只是将区块链看成是一个概念,并以此来获取资本和流量不同。当人们对于区块链的认识变得深入,资本和流量反倒不再是区块链玩家们真正关心的问题。至少从当下情况来看,那些依然还在区块链行业里坚守的玩家们,更多地在坚持长期主义,更多地在寻求区块链与行业结合的正确的方式和方

  8. ruby - 在 Ruby 中声明 "private"/"protected"时实际发生了什么? - 2

    在Ruby类定义中声明private/protected时实际发生了什么?他们不是keywords,这意味着它们必须是方法调用,但我找不到它们的定义位置。它们似乎没有记录在案。声明private/protected方法(如下所示)的两种不同实现方式是否不同?(第二种方式显然是方法调用,但在第一种方式中并不那么明显。)classFooprivatedefi_am_private;enddefso_am_i;endendclassFoodefi_am_private;enddefso_am_i;endprivate:i_am_private,:so_am_iend

  9. ruby - 处理在 keyup 事件上发生的 javascript 弹出窗口 - 2

    我在HTML页面上有一个文本字段,用于检查您是否输入了1到365之间的值。如果用户输入了无效值,如非数字字符或不在范围内的值,它显示一个弹出窗口。我在watirwiki上看到有一个select_no_wait方法,用于在您从列表中选择无效值时关闭弹出窗口。处理键盘事件时出现的弹出窗口的好方法是什么?我是否需要按照select_no_wait方法的实现方式进行操作,或者我们是否可以启动一个不同的进程来消除调用set方法时可能出现的弹出窗口。带有Javascript验证函数的HTML文件示例如下:varnum=0functionvalidate(e){varcharPressed=Stri

  10. Ruby 捕获 NoMethodError 并从发生异常的地方继续执行 - 2

    在Ruby中,我想在另一个对象中捕获在一个对象上生成的NoMethodError,然后将一些值返回到引发异常的位置并继续执行。有没有现成的方法可以做到这一点?我想到的最好的是:classExceptionattr_accessor:continuationendclassOuterdefhelloputs"hello"endclassInnerdefworldputs"world"enddefmethod_missing(method,*args,&block)x=callccdo|cc|e=RuntimeError.exception(method)e.continuation=cc

随机推荐