[数电实验]外星萤火虫设计
[数电实验]外星萤火虫设计
文章目录
- [数电实验]外星萤火虫设计
- 题目描述
- 电路要求
- 题目分析
- 解决方案
- 代码
- 仿真
题目描述
在遥远的 Mars星上有一种类似地球萤火虫的生物 星上有一种类似地球萤火虫的生物 —— 外星萤火虫。
外星萤火虫是社群生物,“ 外星萤火虫是社群生物,“ 虫后 ”以自己的发光信息 ”以自己的发光信息 f0(正常时是 30%占 空比的 毫秒脉冲, 繁殖季为 占空比为 50%,年老时占空比逐渐减小 ,周期逐渐 增大, 直至死亡)控制整个 族群的活动。 虫后死亡如果没有新的及时出 现,族群成员就会四处逃散。
“信虫 ”负责信息中转、传达, 为了使虫后的指令能够到整个族”负责信息中转、传达, 为了使虫后的指令能够到整个族信虫看到后或者其它发光时会自动同步己的器,使得f1与虫后 的 f0同频相,并且自动调整发光 同频相,并且自动调整发光 脉冲宽度为 0.3毫秒, 以免虫族成 员发现虫后衰老而引起恐慌, 保障虫族安定。
“哨虫 ”在虫族领地边界戍卫 ,哨看到信的号会同步反馈一个防”在虫族领地边界戍卫 ,哨看到信的号会同步反馈一个防信号,如果安全 (sta= =0),防卫信号是一个与 f1同相的 双脉冲 双脉冲 信号 f2a(脉冲宽 度 0.1毫秒);当敌人来犯 (sta= =1),防卫信号是 ,防卫信号是 三脉冲 信号 f2b(脉冲宽度 0.1毫 秒)。
哨虫离开边界地区会自动变换职责为信虫。
电路要求
- f0的频率范围是 0.5kHz~1.2kHz,占空比 ,占空比 1%~30%,实验时由信号发生器 ,实验时由信号发生器 ,实验时由信号发生器 产生 。
- 信虫电路的输入是 f0,输出是 ,输出是 f1,电路 内部有 50MHz的高精度时钟源。
- 哨虫电路的输入是 f1和 p(位置信息, 0表示不在边界地区, 1表示在边 界地区 ),以及 sta(状态信息, 状态信息, 0表示安全, 1表示敌人来犯 ),输出是 f2。
题目分析
本题是一个创新类的数电实验,将上升沿检测、脉冲产生等要求综合在一个“实际”的应用场景中。
时钟作为产生脉冲的基准,仅用来作为产生脉冲的其中一个触发信号,另外一个触发信号是虫后的上升沿,此处就涉及到两个上升沿的检测,首先排一下坑:同一个always语句不能同时检测两个posedge,会报错;如果用两个always语句同时检测,在FPGA中,几个always语句是同时执行的,这其中涉及几个变量之间的互相赋值,Quartus会报一个变量在同一时钟周期里给同一变量多次赋值的错。
解决方案
在时钟clk的上升沿检测的条件下,增加手动的虫后上升沿检测。具体操作为:每个时钟将虫后的状态保存到缓存变量中,下一个时钟周期中,对虫后的现态和上一次状态进行判断,如果是上升沿,则产生脉冲信号。
脉冲信号的产生:脉冲信号的产生依赖于FPGA 中的50MHz高频时钟,只需要类似于分频的操作就行。
代码
// 外星萤火虫设计
module xx_xxxx_6(clk,f0,f1,p,sta,f2);
input f0,clk,p,sta;
output reg f1,f2;
reg [14:0]cnt;
reg temp,flag;always @(posedge clk)
begin
if(temp==1'b0&&f0==1'b1) flag<=1'b1; //判断f0上升沿,并给出标志信号
if(flag)
begincasex({p,sta})2'b0_x:begin //f1和f2均为信虫状态if(cnt<15'd15000)begin f1<=1'b1;f2<=1'b1;cnt<=cnt+1'd1;endelse begin f1<=1'b0;f2=1'b0;cnt<=15'd0;flag<=1'b0;end //脉冲产生结束,标志信号置0end2'b1_0:begin //f2为哨虫且边界安全if(cnt<15'd5000)begin f1<=1'b1;f2<=1'b1;cnt<=cnt+1'd1;endelse if(cnt<15'd10000) begin f1<=1'b1;f2<=1'b0;cnt<=cnt+1'd1;endelse if(cnt<15'd15000) begin f1<=1'b1;f2<=1'b1;cnt<=cnt+1'd1;endelse begin f1<=1'b0;f2=1'b0;cnt<=15'd0;flag<=1'b0;endend2'b1_1:begin //f2为哨虫且边界危险if(cnt<15'd5000)begin f1<=1'b1;f2<=1'b1;cnt<=cnt+1'd1;endelse if(cnt<15'd10000) begin f1<=1'b1;f2<=1'b0;cnt<=cnt+1'd1;endelse if(cnt<15'd15000) begin f1<=1'b1;f2<=1'b1;cnt<=cnt+1'd1;endelse if(cnt<15'd20000) begin f1<=1'b0;f2<=1'b0;cnt<=cnt+1'd1;endelse if(cnt<15'd25000) begin f1<=1'b0;f2<=1'b1;cnt<=cnt+1'd1;endelse begin f1<=1'b0;f2=1'b0;cnt<=15'd0;flag<=1'b0;endendendcase
end
else cnt<=15'd0;
temp<=f0;
end
endmodule
仿真
下面是modelsim仿真代码
//test
`timescale 1ns/1nsmodule tese_xx_xxxx_6;
//clk,f0,f1,p,sta,f2
wire f1,f2;
reg clk,f0,p,sta;initial //初始化变量
begin
clk=0;
f0=0;
p=0;
sta=0;#6000000 sta=1;
#4000000 p=1;
#4000000 sta=0;
#5000000 sta=1;
end
always #10 clk=~clk; //50MHz时钟信号
always
begin //产生凌乱的虫后信号
#100000 f0=1; //f0信号
#600000 f0=0;
#1000000 f0=1;
#1300000 f0=0;
#1800000 f0=1;
#1900000 f0=0;
end
xx_xxxx_6 test(.clk(clk),.f0(f0),.p(p),.sta(sta),.f1(f1),.f2(f2));endmodule
仿真结果如图
变量从上到下依次为:clk、f0,p,sta,f1,f2。
点个赞,不定时更新~~
[数电实验]外星萤火虫设计相关推荐
- 湖南大学_数电实验_模型机设计_CPU设计_verilog_课程实验报告
本学期的数电课程实验就是模型机设计,由四次小实验构成,最后一次实验验收要求使用quartus做出一个模型机. 该实验的重要性:该实验的核心在于基于实验指导书设计CPU,从而帮我们理解CPU的工作原理. ...
- 数电实验:数字时钟设计 (经验分享,仅供参考)
实 验 目 的 一.独立完成一个数字小系统的设计 二.基于实验箱对设计进行验证 实验内容: 能够显示时.分.秒共6位数字: 考虑使用实验箱时钟(频率包括1M.500K. 250K.100K.10K.1 ...
- 【数电实验7】Verilog—外星萤火虫
[2022.05西南交大数电实验] [本代码及波形已通过老师验收.仅供参考.] [参考博客:[数电实验]外星萤火虫设计_难凉oh的博客-CSDN博客] [建议:有些口语化的注释看完删掉比较好哈,怕老师 ...
- 数电实验(一)利用与非门设计四舍五入判别电路
数电实验(一)利用与非门设计四舍五入判别电路 要求: 1.输入为8421BCD码,接四个逻辑电平开关,同时接数码管. 2.输出和LED相连. 一.写出逻辑函数: F(A,B,C,D)=∑m(5,6,7 ...
- 数电实验(三)利用3线-8线译码器74LS138和与非门设计一个表决电路
数电实验(三)利用3线-8线译码器74LS138和与非门设计一个表决电路 要求: 设计一个表决电路, 当控制端M=0时,输入端A.B.C一致同意时,输出F为1,否则输出为0:当控制端M=1时,输入端A ...
- 数电实验4:彩灯控制器设计
数电实验4:彩灯控制器设计 一.实验目的 二.实验内容 三.预习要求 四.实验报告要求 五.Verilog代码.RTL视图及仿真波形 1.Verilog代码 2.RTL视图 3.仿真波形 西南交大数电 ...
- 数电实验(四)利用集成数值比较器74LS85设计一个4位数值比较器
数电实验(四)利用集成数值比较器74LS85设计一个4位数值比较器 要求: 1.输入为两个4位二进制数,分别接四个逻辑电平开关,同时接数码管 2. 输出和LED相连 Multisim仿真:
- 数电实验6:可控分频器设计
数电实验6:可控分频器设计 一.实验目的 二.基本实验内容 三.提高性实验内容(选做) 四.预习实验 五.实验报告要求 六.内容讲解(基础实验内容) 七.testbench及仿真结果 1.testbe ...
- 北邮数电实验三接球小游戏
文章目录 前言 一.实验要求 二.设计思路 三.设计系统框图 四.源代码 五.遇到的问题和解决办法 六.总结 前言 北邮数电实验三"接球小游戏" 数电实验验收已经结束了,实验报告也 ...
最新文章
- 单词转换(map对象)
- 自建mysql和华为云mysql_自建数据库和云数据库区别和使用(以MySQL为例)
- ROS调用本地摄像头数据并在rviz里显示
- python循环输出00-59
- GPUImage 简介
- Linux内核:容器底层cgroup如何使用
- Android Content Provider基础
- sqlserver设计视图修改表时不允许保存更改的问题处理
- java模拟器vivo_vivo X3t驱动下载
- 计算机自带的画图软件在哪里,mac画图工具在哪里_mac自带画图工具怎么打开-win7之家...
- Oracle11G数据库的双机热备份配置--基础篇
- <毕业设计>最适合大学生的12个Java系统项目(附源码)
- arcgis出界址点成果表_勘测定界界址点坐标成果表(TXT文件)
- Freemyapps赚取积分终极图文教程
- ubuntu18.04 编译rtt-lwr
- 2013年第四届蓝桥杯C/C++B组省赛题目及答案 1
- MemBrain: Improving the Accuracy of PredictingTransmembrane Helices
- excel表格末尾添加一行_#天职经验谈# WORD表格技巧之 定位与公式
- 鼠标滚动调整图片大小(css3 zoom 放大缩小)
- R语言入门 Chapter05 | 因子
热门文章
- 我的MEM管理类研究生,在路上
- PS安装包及教程(Photoshop cc2018)
- 四川铺管家:拼多多砍价需要怎么砍
- CSDN 上传图片取消自动加水印的方法
- android.view.WindowLeaked: Activity com.xty.activity.ActivityMainPage has leaked window com.android.
- 陶哲轩实分析 3.5 节习题试解
- 怎么录制电脑上正在播放的视频音频
- 面试杀手锏:Redis源码之SDS
- 佛祖保佑 永无BUG
- [SAP]JCO数据类型映射关系表