资源描述
FPGA实验报告 信息24 赵恒伟 2120502099
实验1:状态机
问题一:你觉得上面这段代码中,q 到底在怎样变化?
答:首先语句中缺少begin,q <= q也不合理;如果有异步复位信号,q=0;否则,如果有上升沿且a不等于1,q=q;如果有上升沿且a=1,q直接等于b;
问题二:本页中,q 到底在怎样变化?
答:复位时,q=0;否则q=d。
问题三:sync电路图: 仿真:
该电路使输入信号与时钟同步,并产生稳定脉冲信号,进行节拍分配。
四、红路灯电路系统框图:
问题分析:
东西南北都有车时,状态转换时,东西绿灯时间长于60s;三秒后,南北通行,绿灯时间少于40s。
计数器不能使用同一个,但可以减少触发器数目
实验2:数字钟
环节二 仿真时注意问题:
1.仿真1小时需要多少时间?
答:取决于输入信号clk的频率。
2.现在的时钟是秒时钟,实际系统的时钟是50MHz.那用50MHz的时钟的情况下,仿真1小时要多少时间?如何解决该问题?
答:1/50000000*60*60=0.000072 s;可以将输入信号分频。
环节三
1,复位如何输入的?按键防抖如何制作的?修改按键防抖的间隔会导致什么问题?
答:复位信号由clock顶层文件输入,按键防抖思路是使按键信号通过触发器进行延迟,持续输入十个上升沿才认为按键一次,避免了抖动。增加时间会导致按键时间边长,短按可能误认为是抖动。
2,数码管的显示使用组合逻辑输出好还是时序逻辑输出好?
答:组合逻辑好
环节四 :闰年:
y1和y2分别为输入的年高两位和年低两位,y为年份,当cout=1时为闰年,cou=0时为平年。如果y2=0则y1能被4整除时为闰年:当y2!=0时y2能被4整除则为闰年。后面通过将y1循环加100次再加上y2得到年份y。
process(y1,y2)
variable i:integer;
begin
if y2=0 then
if (y1 rem 4)=0 then
cout<='1';
else cout<='0';
end if;
elsif y1 rem 4=0 then
cout<='1';
else cout<='0';
end if;
i:=y1;
for n in 0 to 99 loop
i:=i+i;
end loop;
y<=i+y2;
end process;
实验3:SRAM
环节二、两种仿真的比较 lab/lab3/step1/memtest.vhd
用功能仿真和时序仿真两种方法,比较一下SS的状态数值的变化。
Functional:
Timing
时序仿真中会出现没有定义过的状态。
环节3 添加地址管理 lab/lab3/step1/memtest.vhd
是写重要还是读重要?这个代码,如果读请求被漏掉了怎么办?如何防止?
如何保证写满之后不再写,读空之后不再读。
答:写重要,先把要写的数据存储下来。 如果读请求漏掉了,可以更改设计将读请求存下来,写完调用读请求,继续工作,即乒乓中断读取。
如何保证写满之后不再写,读空之后不再读。
答:在写之前判断内存是否写满,如果写满输出反馈信息,或者丢掉写内容;读出之前判断是否读空,如果读空不在输出,或者发出标志读空信号。
环节5 lab/lab3/step3/sramtop.vhd
该实验中什么速率?
答:串口通讯为115200。
实验4:片内RAM和FIFO;
环节2 参考step2的代码,打开lab/lab4/step2/iptop.vhd
如何仿真这个IP核?读请求发出后,数据在何时从管脚送出来?
答:将iptop VHDL文件设为top level entity,编译。仿真时,将其他连接信号赋值,观察输出。
芯片内部用到三态门,该如何实现?
答:
代码:library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity santai is
port (
d_in : in std_logic;
en : in std_logic;
d_out: out std_logic
);
end santai;
architecture behav of santai is
begin
process(d_in , en)
begin
if en = '1' then
d_out<= d_in;
else
d_out<='Z';
end if;
end process;
end behav;
仿真:
实验5: 在线调试与SOC
环节1 生成signal TAPII lab/lab5/section1/
注意各个触发条件是与的关系,同时成立才触发
为什么芯片一编程,PRESSCNT就变成1了。查查看。
答:因为
process(clock_50)
begin
if clock_50'event and clock_50 = '1' then
sft(1) <= sft(0);
sft(0) <= not outen;
if sft = B"01" then
presscnt <= presscnt +1;
end if;
end if;
end process;
上升沿时初值转移到sft(1),使得 sft = B"01" 成立,于是presscnt +1。
自由设计实验报告
一、 设计名称:答辩打分器
二、项目介绍:
在生活中,经常会遇到一位选手展示,数位裁判评价打分的情景。在简单环境中,大部分情况是人工记录打分情况。为了实现打分的公平公正、简单省时,故产生了该项目。
现假情景设有一位答辩人,三位评委,答辩结束,由每一位评委给出3-100的分数(由于答辩人分数和已打分评委数显示在同一数码屏,所以评委给分不得低于3分,避免混淆),当第一位评委给分后,屏幕显示1,第二位给分后显示2,当第三位评委给分后,说明打分完毕,屏幕直接显示最终得分,此处以平均数为例。
得到最终得分之后,由一人 reset 清零,开始下一轮答辩。
信号说明:三位裁判输入的成绩:judge1,judge2, judge3 是脉冲信号
成绩缓存:judgeA,judgeB,judgeC是电平信号
最终得分运算结果:score_int
输出:score
状态分配与化简
记录输入状态[count]
"001" "010" "100"
"011" "101" "110"
"111"
初态
化简状态 s
s1
s2
s3
s0
三、FPGA在系统中的位置和FPGA内部结构框图;
FPGA在系统中充当数据处理单元,进行各种运算;充当控制单元,控制状态转移和输出;充当存储单元,将输入信号存储下来。
FPGA内部结构框图;
输入
缓存器
运算器
输出
Clock
逻辑流程图:
开始
1
judge3 /= 0
judge2 /= 0
Judge1/= 0
0 0 0
1 1 1
judgeB
judgeC
judgeA
judgeA+judgeB+judgeC)/3
score
四、完成程度及未完成部分或下布完善计划的讨论。
完成状态:基本功能全部完成
仿真结果:
设计过程中已克服的问题:
1. 输入定义为整数INTEGER,占用资源太大;
2. 两位评委同时输入,只能接收一位评委的分数,另一位丢失;
3. 输出score有一拍显示上一轮得分,之后才给出该轮得分,数据有延迟;
完善计划:
1. 解决在一轮里,每一位裁判不可以重复输入,不可修改的限制;
2. 添加内存模块,将历史数据记录下来,便于之后查证;
3. 增加初始设置功能,使用前可以设置每一位裁判所占权重,保存后,开始打分。
展开阅读全文