资源描述
实验3.1. modelsim仿真测试
一、实验目的
1、分析分频器的VHDL代码,了解信号和变量的差别。
2、学习modelsim软件环境下,采用测试向量进行测试的方法。包括:激励文件的建立和测试实现。
二、实验步骤
1.1. modelsim的批处理操作流程
建立一个工程File->New Project Wizard,
信号描述
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity div_Signal is
generic (div_nx2:positive:=4);
port ( clk: in std_logic;
q: out std_logic);
end div_Signal;
architecture behav of div_Signal is
SIGNAL fre_N : integer range 0 to div_nx2:=0;
SIGNAL clk_tmp: std_logic:=’0’;
BEGIN
q <= clk_tmp;
process(clk)
begin
if clk'event and clk = '1' then
if fre_N >= div_nx2 - 1 then fre_N <= 0; clk_tmp <= not clk_tmp;
else fre_N <= fre_N + 1;
end if;
end if;
end process;
end behav;
变量描述:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity div_var is
generic (div_nx2:positive:=4);
Port ( CLK : in std_logic;
clkout: out std_logic);
end div_var;
architecture Behavioral of div_var is
signal Clk_Out : std_logic:='0';
begin
process(CLK)
variable fre_N:integer range 0 to div_nx2:=0;
begin
if rising_edge(CLK) then
if fre_N>=div_nx2-1 then fre_N := 0; Clk_Out <= not Clk_Out;
else fre_N:=fre_N+1; end if;
end if;
end process;
clkout <= Clk_Out;
end Behavioral;
方法1:
方法2:
存为:div_signal_do.do
vsim work.div_signal
add wave sim:/div_signal/*
force -freeze sim:/div_signal/clk 1 0, 0 {10 ns} -r 20
run 400ns
在编译后,获得了逻辑网表,但未开始仿真。可以直接运行DO文件。
点击Next,我们将其工程存储在D:\Temp\ex1下(注意:存储路径中一定不能有空格或中文,否则找不到相关文件),工程命名为ex1,如下所示
1.2. 使用测试向量testbench
新建项目,添加新文件:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cntx is
port(clk,rst,en: in std_logic;
q: out std_logic_vector(3 downto 0));
end cntx;
architecture behave of cntx is
signal q_n: std_logic_vector(3 downto 0);
begin
process(clk, rst, en, q_n)
begin
if (rst = '1') then q_n <= (others => '0');
elsif rising_edge(clk) then
if en = '1' then q_n <= q_n + 1; end if;
end if;
end process;
q <= q_n;
end behave;
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.STD_LOGIC_UNSIGNED.all ;
ENTITY cntx_tb IS
constant ClkPeriod: time := 20 ns;
END ;
ARCHITECTURE cntx_tb_arch OF cntx_tb IS
SIGNAL q : std_logic_vector (3 downto 0) ;
SIGNAL clk,en,rst : STD_LOGIC ;
COMPONENT cntx
PORT ( q : out std_logic_vector (3 downto 0) ; clk,en,rst : in STD_LOGIC );
END COMPONENT ;
BEGIN
DUT : cntx PORT MAP (q=>q ,clk=>clk, en=>en ,rst=> rst);
simProcess: process
begin
rst <= '1'; wait for 50 ns;
rst <= '0' ; wait for 1000 ns;
rst <= '0' ;
end process simprocess;
en <= '0' after 0 ns, '1' after 50 ns,
'0' after 850 ns, '1' after 900 ns;
ClockProcess: process(clk, rst)
begin
if (rst = '1') then clk <= '0';
else clk <= not clk after ClkPeriod;
end if;
end process ClockProcess;
END ;
打开菜单simulate\start simulation:
实验3.2. 基于SOPC的跑马灯
一、实验目的
1、熟悉用Quartus II 进行嵌入式最小系统开发的基本流程。
2.熟悉用SOPC Builder 进行Nios II CPU 开发的基本流程。
3.熟悉用Nios II IDE 进行汇编代码的编写、下载的基本过程,通过Nios II IDE集成开发平台调试软件。
二、实验原理
SOPC(system on a programmable chip ),就是把一个系统集成在单片可编程芯片中。而一个基于Nios II软核处理器的嵌入式最小系统,至少要包含一个NIOS II软核处理器、一个随机存储器(RAM)、Flash ROM(存储代码、数据等)和一个外部设备。为了方便初学可以进一步简化系统,采用RAM的一段存储区来代替ROM,并只管理一个芯片外部的设备(LED灯)。
三、实验内容
学习基于NIOS II软核处理器的嵌入式系统开发流程,按照实验步骤,设计完成一个最简系统,实现8个LED发光二极管的循环发光显示。系统的基本开发流程包括:
(1) 实验准备。
(2) 在Quartus II 中新建一个工程项目,便于整个硬件系统的项目管理。
(3) 在SOPC Builder 中根据需要加入软核处理器和各种IP 核,配置系统的硬件结构。
(4) 在Quartus II环境下,生成SOPC Builder配置的一个应用实例,并对实例的管脚进行设置,编译硬件逻辑系统。
(5) 下载逻辑结构到FPGA芯片中。
(6) 在Nios II IDE 平台下新建一个软件项目,根据(3)中配置的结构和硬件地址,编写软件代码。
(7) 编译、下载并通过指令集仿真器调试软件代码,查看运行结果,直到正确。根据需要,将(6)中编译生成的软件代码下载到硬件平台的代码Flash 中。。
四、实验步骤
1、建立一个工程。
File->New Project Wizard,
点击Next,设置如下所示
然后,点击Next,如下所示
这一页不需要修改,点击Next,如下图所示,Family:CYCLONE IV E,芯片选择:EP4CE15F17C8,这里面有个地方需要说明一下EP4CE15F17C8N,N是代表无铅,跟芯片型号没关系;而EP4CE15F17C8L癿L是低电压的意思,就是说这个是低电压版本。这个地方大家要注意下,我们使用的是正常的版本,即型号为EP4CE15F17C8。如下图红圈处。
然后点击Next,Next,Finish,完成工程建立。
点击tool/sopc builder:
package require ::quartus::project
set_location_assignment PIN_M1 -to reset
set_location_assignment PIN_R9 -to clk50m
set_location_assignment PIN_J1 -to led[0]
set_location_assignment PIN_J2 -to led[1]
set_location_assignment PIN_K1 -to led[2]
set_location_assignment PIN_K2 -to led[3]
重新编译系统,下载硬件到FPGA实验板。然后打开软件开发环境:
第一次运行,可能会要求设置工作目录,可改为项目路径,如:d:\codework
打开
typedef signed char alt_8;
typedef unsigned char alt_u8;
typedef signed short alt_16;
typedef unsigned short alt_u16;
typedef signed long alt_32;
typedef unsigned long alt_u32;
typedef long long alt_64;
typedef unsigned long long alt_u64;
#include "system.h"
#include <alt_types.h>
#include "altera_avalon_pio_regs.h"
void delay(void)
{ unsigned int i;
i=100000;
while(i>0) { i--; }
}
int alt_main(void)
{ unsigned char led_data;
unsigned int led_code;
while(1)
{ for(led_data=0;led_data<4;led_data++)
{ led_code=0x01<<led_data;
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,~led_code);
delay();
}
}
return 0;
}
#include "system.h"
#include <alt_types.h>
#include "altera_avalon_pio_regs.h"
int main()
{ alt_u8 led_data=0x2;
alt_u8 dir=0;
volatile int i;
while(1)
{
if(led&0x9){dir=(dir^0x1)}
if(dir)led=led>>1;
else{led<<1;}
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,led);
i=0;
while(i<200000)i++;
}
return 0;
}
展开阅读全文