【2022.05西南交大数电实验】

【本代码及波形已通过老师验收。仅供参考

参考博客:[数电实验]外星萤火虫设计_难凉oh的博客-CSDN博客】

建议:有些口语化的注释看完删掉比较好哈,怕老师查验的时候看起来太明显咯】

最后一次数电实验啦!!完结撒花~~祝大家实验考试顺利!!

目录

1 Quartus代码编写

2 test代码

3 ModelSim仿真

4 实验记录、实物接线与实验现象


1 Quartus代码编写

本代码将信虫、哨虫模式合在一起编写。

module yck_1716_7_1(clk, f0, p, sta, f1, f2);input clk;  //50MHz的高精度时钟源输入
input f0;   //虫后的发光信号,信虫电路的输入
input p;        //位置信息:0表示不在边界地区,1表示在边界地区
input sta;  //状态安全信息:0表示安全,1表示敌人来犯//f1与虫后的f0同频同相
output f1;  //信虫电路的输出,哨虫电路的输入
output f2;  //哨虫电路的输出
reg f1,f2;parameter N0 = 5000;  //0.1毫秒的脉冲走过多少个时钟信号:0.1ms/(1/50MHz) = 0.1ms/20ns = 5000个
//防卫信号的脉冲宽度是0.1毫秒
//该信号是根据信虫信号f1进行的同步反馈
//如果安全(sta==0),防卫信号是一个与f1同相的双脉冲信号f2a
//当敌人来犯(sta==1),防卫信号是三脉冲信号f2breg [14: 0] cnt;    //计数
reg temp;   //寄存上一clk时刻f0值
reg flag;   //用以判断f0是否为上升沿给出的标志信号always @ (posedge clk)beginif(!temp & f0)  //temp为上一clk时刻f0值flag <= 1'b1;   //判断f0上升沿,并给出标志信号if(flag)begincasex({p,sta}) //拼接在一起2'b0_x:  //哨虫不在边界地区,职能为信虫beginif(cnt < 3*N0)beginf1 <= 1'b1;f2 <= 1'b1;cnt <= cnt + 1'd1;endelse beginf1 <= 1'b0;f2 <= 1'b0;cnt <= 15'd0;flag <= 1'b0;    //脉冲产生结束,标志信号置0endend2'b1_0:  //哨虫在边界地区,且边界安全beginif(cnt < N0)beginf1 <= 1'b1;f2 <= 1'b1;        //对应f2a的第一处高电平区cnt <= cnt + 1'd1;endelse if(cnt < 2*N0)beginf1 <= 1'b1;f2 <= 1'b0;      //对应f2a的低电平区cnt <= cnt + 1'd1;endelse if(cnt < 3*N0)beginf1 <= 1'b1;f2 <= 1'b1;     //对应f2a的第二处高电平区cnt <= cnt + 1'd1;endelsebeginf1 <= 1'b0;f2 <= 1'b0;cnt <= 15'd0;flag <= 1'b0;    //脉冲产生结束,标志信号置0endend2'b1_1:  //哨虫在边界地区,且边界不安全beginif(cnt < N0)beginf1 <= 1'b1;f2 <= 1'b1;       //对应f2b的第一处高电平区cnt <= cnt + 1'd1;endelse if(cnt < 2*N0)beginf1 <= 1'b1;f2 <= 1'b0;      //对应f2b的第一处低电平区cnt <= cnt + 1'd1;endelse if(cnt < 3*N0)beginf1 <= 1'b1;f2 <= 1'b1;      //对应f2b的第二处高电平区cnt <= cnt + 1'd1;endelse if(cnt < 4*N0)beginf1 <= 1'b0;f2 <= 1'b0;      //对应f2b的第二处低电平区cnt <= cnt + 1'd1;endelse if(cnt < 5*N0)beginf1 <= 1'b0;f2 <= 1'b1;      //对应f2b的第三处高电平区cnt <= cnt + 1'd1;endelsebeginf1 <= 1'b0;f2 <= 1'b0;cnt <= 15'd0;flag <= 1'b0;    //脉冲产生结束,标志信号置0endendendcaseendelse  cnt <= 15'd0;    temp <= f0;endendmodule

2 test代码

得到测试v文件的步骤见博客【数电实验5】Verilog—可控分频器设计 & ModelSim的使用_kokoのadventure的博客-CSDN博客_可控分频器设计

参考博客中的占空比存在问题,本人根据自己的理解进行了修正如下:


`timescale 1 ns/ 1 ns
module yck_1716_7_1_vlg_tst();
// constants
// general purpose registers// test vector input registers
reg clk;
reg f0;
reg p;
reg sta;
// wires
wire f1;
wire f2;// assign statements (if any)
yck_1716_7_1 i1 (
// port map - connection between master ports and signals/registers   .clk(clk),.f0(f0),.f1(f1),.f2(f2),.p(p),.sta(sta)
);
initial
begin
// code that executes only once
// insert code here --> begin                          clk = 0;f0 = 0;p = 0;sta = 0;#11000000 p = 1; //11ms后由信虫模式变为哨虫模式#10000000 sta = 1;    //再10ms后敌人来犯// --> end
$display("Running testbench");    //可删掉哦
endalways #10 clk = ~clk;  //50MHz时钟信号always
begin
// insert code here --> begin                          //产生虫后信号f0//繁殖季占空比为50%//正常时是30%占空比的毫秒脉冲,年老时占空比逐渐减小,周期逐渐增大,直至死亡//题设:f0的频率范围是0.5kHz(周期2.0ms)~1.2kHz(周期0.83ms)//此处f0取1kHz//题设:占空比1%~30%f0 = 1;  #500000;        //0.5ms 繁殖季占空比为50%f0 = 0;   #500000;        //0.5msf0 = 1;  #300000;        //0.3ms 正常占空比为30%f0 = 0;    #700000;        //0.7ms 这里正常状态的数量可以自己选哈,这里就设置两个正常状态f0 = 1;   #300000;        //0.3ms 正常占空比为30%f0 = 0;    #700000;        //0.7msf0 = 1;  #200000;        //0.2ms 开始衰老占空比为20%f0 = 0;  #800000;        //0.8msf0 = 1;  #100000;        //0.1ms 占空比为10%f0 = 0;  #900000;        //0.9ms f0 = 1; #50000;         //0.5ms 占空比为5%f0 = 0;   #950000;        //0.95ms// --> end
end
endmodule

其中,正常状态(占空比为30%)的设置为了一个周期出现两次。

3 ModelSim仿真

生成相关波形的相关步骤见博客【数电实验5】Verilog—可控分频器设计 & ModelSim的使用_kokoのadventure的博客-CSDN博客_可控分频器设计

测试波形如下:

4 实验记录、实物接线与实验现象

信号名

主板器件

PIN

信号名

主板器件

PIN

clk

50MHz

PIN_90

f2

IO1/LED1

PIN_50

p

Key0/SW0/LED8

PIN_24

f1

IO0/LED0

PIN_46

sta

Key1/SW1/LED9

PIN_31

f0

ECLK

PIN_23

Top-level Entity name

Family

Device

yck_1716_7_1

Cyclone IV E

EP4CE6E22C8

Total logic elements

Total registers

Total pins

58 / 6,272 ( < 1 % )

19

6 / 92 ( 7 % )

Total memory bits

Embedded Multiplier 9-bit elements

Total PLLs

0 / 276,480 ( 0 % )

0 / 30 ( 0 % )

0 / 2 ( 0 % )

注意!选择脉冲波(或称矩形波)(可调占空比)而不是方波进行输出:

20%:

30%: 

50%:

黑夹子接GND(不一定接图上位置的GND,随便哪个GND都行),红夹子接ECLK: 

信虫模式:

哨虫模式(安全):

哨虫模式(敌袭):

【数电实验7】Verilog—外星萤火虫相关推荐

  1. 【杭电数电实验】verilog入门指北

    verilog入门指北 前言 指北内容 面向人群 基础实验 1-15 代码参考 正文 ISE 的安装 实验的基本操作流程 可能出现的问题 创建工程闪退 希望删除某一文件,实际上并没有删除 如何编写测试 ...

  2. [数电实验]外星萤火虫设计

    [数电实验]外星萤火虫设计 文章目录 [数电实验]外星萤火虫设计 题目描述 电路要求 题目分析 解决方案 代码 仿真 题目描述 在遥远的 Mars星上有一种类似地球萤火虫的生物 星上有一种类似地球萤火 ...

  3. 数电实验4:彩灯控制器设计

    数电实验4:彩灯控制器设计 一.实验目的 二.实验内容 三.预习要求 四.实验报告要求 五.Verilog代码.RTL视图及仿真波形 1.Verilog代码 2.RTL视图 3.仿真波形 西南交大数电 ...

  4. 北邮数电实验三接球小游戏

    文章目录 前言 一.实验要求 二.设计思路 三.设计系统框图 四.源代码 五.遇到的问题和解决办法 六.总结 前言 北邮数电实验三"接球小游戏" 数电实验验收已经结束了,实验报告也 ...

  5. 数电实验6:可控分频器设计

    数电实验6:可控分频器设计 一.实验目的 二.基本实验内容 三.提高性实验内容(选做) 四.预习实验 五.实验报告要求 六.内容讲解(基础实验内容) 七.testbench及仿真结果 1.testbe ...

  6. 数电实验报告实验一_大二下学期的两三事之数电实验amp;课设

    数电实验&课设 叮 写在前面 这学期的数电实验老师是陈W老师.上学期的模电,选过一次他的课,线下教学,老师讲课游刃自如,点到为止,但又醍醐灌顶:这学期线上教学,可能是软件运用不熟练,他多少有些 ...

  7. 数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;

    数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D: 实验数据单

  8. 数电实验(一)利用与非门设计四舍五入判别电路

    数电实验(一)利用与非门设计四舍五入判别电路 要求: 1.输入为8421BCD码,接四个逻辑电平开关,同时接数码管. 2.输出和LED相连. 一.写出逻辑函数: F(A,B,C,D)=∑m(5,6,7 ...

  9. c语言离散卷积编程,数电实验一 离散卷积的C语言编程.ppt

    数电实验一 离散卷积的C语言编程.ppt 实验一 离散卷积的C语言编程实验,DSP实验室,实验性质,综合设计性实验,实验目的,1 了解和认识常用的各种信号: 2 掌握卷积的定义和计算方法: 3 掌握在 ...

最新文章

  1. python修改父类属性_Python super和设置父类属性
  2. 输入过滤筛选下拉信息(类似百度输入)
  3. 训练日志 2019.4.17
  4. 滴滴悬赏100万“捉拿”司机;手机QQ又宕机;中兴手机或将出售 | CSDN 极客头条...
  5. Angular官方教程采坑
  6. 【雨林木风】装机人员常用软件工具盘Y6.5
  7. 针对 VOC2007和VOC2012 的具体用法
  8. 软件测试项目实战经验附视频以及源码【商城项目,app项目,电商项目,银行项目,医药项目,金融项目】
  9. 英特尔cpu linux驱动程序,Intel处理器现身!Linux芯片组驱动放出
  10. Visual Studio安装时,installer下载不动的问题解决
  11. Python索引 说明
  12. android 下拉状态栏(SystemUI)常见修改记录
  13. 北京第一年-OpenGL-7 egl wgl glx agl glew window display surface context rendertarget glfw都是什么?
  14. 采用morison方程基于matlab计算大直径波浪力,用Morison方程计算分析悬浮隧道所受波浪力初探...
  15. 解决vivado赋reg时出现的cannot assign to memory或者cannot assign a packed type to an unpacked type
  16. 网课python程序设计答案_Python程序设计知到网课答案
  17. docker安装mysql并挂载配置文件和修改密码
  18. 当服务器启动双网卡模式时如何配置OE?
  19. 非211普通一本计算机大学生如何找名企实习?
  20. 数据可视化分析互联网+智慧医疗:预计2023年市场规模将达876.1亿

热门文章

  1. 程序员会被AI取代?程序员在AI时代如何华丽变身?
  2. 十大科学谜题本世纪有望解开:时间是幻觉吗
  3. BERT微调做中文文本分类
  4. 不让「数据孤岛」成为 AI 发展的绊脚石,「联邦学习」将成突破口?...
  5. dd-wrt无线设置_通过DD-WRT的高级技巧为无线路由器添加Linux功能
  6. 能力素质有所欠缺_关键球拿不下来?如何才能提高实战的心理素质!
  7. 计算机网络故障的检测与排除,计算机网络故障诊断与排除(第3版)
  8. 神经元的细胞体有什么用,神经元细胞和神经细胞
  9. vue+ echarts实现地图(中国地图)
  10. canvas实现动画 地球绕太阳公转 月球绕地球公转