数电课程设计

为了帮助大家更好学习FPGA硬件语言,创立此资源

包含文件有:实验报告、仿真文件,资料很全,有问题可以私信

课设一:加减计数器

一、实验内容

1、利用QuartusII和Modelsim实现100进制可逆计数器编码显示实验。

二、实验步骤

(1)安装软件

    事先安装好QuartusII和Modelsim两个软件。

(2)创建工程

(3)编写代码

编写的.v顶层文件:

module counter_1(input clk,input rst,input flag,output out_c);reg [9:0] count;always@(posedge clk or negedge rst)beginif(!rst)begincount <= 0;                 //复位endelse if(flag==1)beginif(count<99)count <= count + 1;     //flag为1,是加法计数器elsecount <= 0;              //计到99复位endelse beginif(count==0)count <= 99;             //计到0复位elsecount <= count - 1;     //flag为0,是减法计数器endendendmodule编写的textbench文件:`timescale 1 ns/ 1 psmodule counter_tb();// constants                                          // general purpose registers// test vector input registersreg clk;reg flag;reg rst;// wires                                              wire out_c;// assign statements (if any)                         counter_1 i1 (// port map - connection between master ports and signals/registers  .clk(clk),.flag(flag),.out_c(out_c),.rst(rst));initial                                               begin                                                 // code that executes only once                       // insert code here --> begin                          clk = 0;rst = 0;#100 rst = 1;flag = 1;#1000 flag =0;        //初始化// --> end                                                                 end                                                   always #5000 flag = ~flag;       //每5000ns之后flag翻转always #10 clk = ~clk;           //时钟周期20ns                                   endmodule

三、实验结果

课设二:交通信号灯

一、实验内容

(1)十字路口有 x、y 方向两组交通信号灯,每组有红、黄、绿灯各一个;

(2)设计一个交通灯控制电路,模拟十字路口交通灯工作情况,红灯亮 35s,黄灯亮 5s,绿 灯亮 30s;

(3)设系统时钟频率为 50MHz,要求用数码管显示计时结果;

(4)掌握 Verilog HDL 的状态机编程,红、黄、绿灯点亮转换用如下的状态转换图实现。

二、实验步骤

(1)编写代码

编写的.v顶层文件:

  1. 
    1.	module traffic(  
    2.	    input clk,  
    3.	    input rst,  
    4.	      
    5.	    output reg LEDR_Y,  
    6.	    output reg LEDY_Y,  
    7.	    output reg LEDG_Y,  
    8.	    output reg LEDR_X,  
    9.	    output reg LEDY_X,  
    10.	    output reg LEDG_X  
    11.	      
    12.	);  
    13.	parameter N = 25000000;  
    14.	parameter S1 = 0;  
    15.	parameter S2 = 1;  
    16.	parameter S3 = 2;  
    17.	parameter S4 = 3;  
    18.	reg [25:0] count;  
    19.	reg CLK_1Hz;  
    20.	reg [2:0] cnt5;  
    21.	reg [4:0] cnt30;  
    22.	reg [1:0]state;//状态  
    23.	  
    24.	//生成1Hz时钟  
    25.	always@(posedge clk or negedge rst)begin  
    26.	if(!rst)begin  
    27.	    count <= 0;  
    28.	    CLK_1Hz <= 0;  
    29.	end  
    30.	else if(count<N-1)begin  
    31.	    count <= count +1;  
    32.	    CLK_1Hz <= CLK_1Hz;  
    33.	end  
    34.	else begin  
    35.	    count <= 0;  
    36.	    CLK_1Hz <= ~CLK_1Hz;  
    37.	end  
    38.	end  
    39.	  
    40.	//生成5进制计数器  
    41.	always@(posedge CLK_1Hz or negedge rst)begin  
    42.	if(!rst)begin  
    43.	    cnt5 <= 0;  
    44.	end  
    45.	else if(cnt5<4)begin  
    46.	    cnt5 <= cnt5 + 1;  
    47.	end  
    48.	else  
    49.	    cnt5 <= 0;  
    50.	end  
    51.	  
    52.	//生成30进制计数器  
    53.	always@(posedge CLK_1Hz or negedge rst)begin  
    54.	if(!rst)begin  
    55.	    cnt30 <= 0;  
    56.	end  
    57.	else if(cnt30 < 29)begin  
    58.	    cnt30 <= cnt30 + 1;  
    59.	end  
    60.	else  
    61.	    cnt30 <= 0;  
    62.	end  
    63.	  
    64.	//状态迁移  
    65.	always@(posedge clk or negedge rst)begin  
    66.	if(!rst)begin  
    67.	    state <= 0;  
    68.	end  
    69.	else begin  
    70.	    case(state)  
    71.	      
    72.	    S1:  
    73.	        if(cnt30==29) state <= S3;  
    74.	        else state <= S1;  
    75.	    S2:  
    76.	        if(cnt30==29) state <= S4;  
    77.	        else state <= S2;  
    78.	    S3:  
    79.	        if(cnt5==4)   state <= S2;  
    80.	        else state <= S3;  
    81.	    S4:  
    82.	        if(cnt5==4)   state <= S1;  
    83.	        else state <= S4;  
    84.	    default: state <= S1;  
    85.	    endcase  
    86.	end  
    87.	end  
    88.	  
    89.	//状态  
    90.	always@(posedge clk or negedge rst)begin  
    91.	if(!rst)begin  //刚开始全灭  
    92.	        LEDR_Y <= 0;  
    93.	        LEDY_Y <= 0;   
    94.	        LEDG_Y <= 0;  
    95.	        LEDR_X <= 0;  
    96.	        LEDY_X <= 0;  
    97.	        LEDG_X <= 0;  
    98.	end  
    99.	else begin  
    100.	    case(state)  
    101.	    S1: begin   //Y方向绿灯亮,X方向红灯亮  
    102.	        LEDR_Y <= 0;  
    103.	        LEDY_Y <= 0;   
    104.	        LEDG_Y <= 1;  
    105.	        LEDR_X <= 1;  
    106.	        LEDY_X <= 0;  
    107.	        LEDG_X <= 0;  
    108.	    end   
    109.	    S2: begin   //X方向绿灯亮,Y方向红灯亮  
    110.	        LEDR_Y <= 1;  
    111.	        LEDY_Y <= 0;   
    112.	        LEDG_Y <= 0;  
    113.	        LEDR_X <= 0;  
    114.	        LEDY_X <= 0;  
    115.	        LEDG_X <= 1;  
    116.	    end  
    117.	    S3: begin   //X方向红灯亮,Y方向黄灯亮  
    118.	        LEDR_Y <= 0;  
    119.	        LEDY_Y <= 1;   
    120.	        LEDG_Y <= 0;  
    121.	        LEDR_X <= 1;  
    122.	        LEDY_X <= 0;  
    123.	        LEDG_X <= 0;  
    124.	    end  
    125.	    S4: begin   //X方向黄灯亮,Y方向红灯亮  
    126.	        LEDR_Y <= 1;  
    127.	        LEDY_Y <= 0;   
    128.	        LEDG_Y <= 0;  
    129.	        LEDR_X <= 0;  
    130.	        LEDY_X <= 1;  
    131.	        LEDG_X <= 0;  
    132.	    end  
    133.	    default: begin   //全灭  
    134.	        LEDR_Y <= 0;  
    135.	        LEDY_Y <= 0;   
    136.	        LEDG_Y <= 0;  
    137.	        LEDR_X <= 0;  
    138.	        LEDY_X <= 0;  
    139.	        LEDG_X <= 0;  
    140.	    end  
    141.	    endcase  
    142.	end  
    143.	  
    144.	end  
    145.	  
    146.	endmodule 编写的textbench文件:
    1.	`timescale 1 ns/ 1 ps  
    2.	module traffic_tb();  
    3.	// constants                                             
    4.	// general purpose registers  
    5.	  
    6.	reg clk;  
    7.	reg rst;  
    8.	// wires                                                 
    9.	wire LEDG_X;  
    10.	wire LEDG_Y;  
    11.	wire LEDR_X;  
    12.	wire LEDR_Y;  
    13.	wire LEDY_X;  
    14.	wire LEDY_Y;  
    15.	  
    16.	// assign statements (if any)                            
    17.	traffic i1 (  
    18.	// port map - connection between master ports and signals/registers     
    19.	    .LEDG_X(LEDG_X),  
    20.	    .LEDG_Y(LEDG_Y),  
    21.	    .LEDR_X(LEDR_X),  
    22.	    .LEDR_Y(LEDR_Y),  
    23.	    .LEDY_X(LEDY_X),  
    24.	    .LEDY_Y(LEDY_Y),  
    25.	    .clk(clk),  
    26.	    .rst(rst)  
    27.	);  
    28.	initial                                                  
    29.	begin                                                    
    30.	     clk = 0;  
    31.	      rst = 0;  
    32.	      #100 rst = 1;  
    33.	                       
    34.	end    
    35.	                                                    
    36.	always   #10 clk <= ~clk;                                                
    37.	                                              
    38.	endmodule  
    

编写的textbench文件:

`timescale 1 ns/ 1 ps  
module traffic_tb();  
// constants                                             
// general purpose registers  reg clk;  
reg rst;  
// wires                                                 
wire LEDG_X;  
wire LEDG_Y;  
wire LEDR_X;  
wire LEDR_Y;  
wire LEDY_X;  
wire LEDY_Y;  // assign statements (if any)                            
traffic i1 (  
// port map - connection between master ports and signals/registers     .LEDG_X(LEDG_X),  .LEDG_Y(LEDG_Y),  .LEDR_X(LEDR_X),  .LEDR_Y(LEDR_Y),  .LEDY_X(LEDY_X),  .LEDY_Y(LEDY_Y),  .clk(clk),  .rst(rst)  
);  
initial                                                  
begin                                                    clk = 0;  rst = 0;  #100 rst = 1;  end    always   #10 clk <= ~clk;                                                endmodule  

三、实验结果

S1到S3的转换:

S3到S2的转换:

S2到S4的转换:

S4到S1的转换:

课设三:波形发生器

一、实验内容

1、仿真实验:正弦信号发生器,学习IP核的使用;

2、拓展要求:三角波信号发生器,熟悉仿真、状态机的使用。

  • 实验步骤

    跳过创建工程的过程。

(1)编写正弦波仿真实验代码

首先我们生成正弦波是提前把正弦波的数据保存在ROM文件(.mif)文件中,然后通过调用ROM的IP核,最后通过读取ROM的数据输出正弦波数据。

创建单端ROM的IP核。

设置ROM的位宽和长度。这里是8位64个信号

添加.mif文件

编写的.v顶层文件:

module waveform(input clk,input rst,output [7:0]data_out,output reg [6:0]data_tri
);
parameter S1 = 0;
parameter S2 = 1;
reg [5:0]addr;
reg [1:0]state;
reg [1:0]next_state;
always@(posedge clk or negedge rst)begin
if(!rst)
addr <= 0;
else
addr <= addr + 1;
endsinROM U1(.address(addr),.clock(clk),.q(data_out));endmodule

(2)编写三角波发生器仿真实验代码

编写的状态机源码:

//状态迁移  
always@(posedge clk or negedge rst)begin  
if(!rst)  state <= S1;  
else  state <= next_state;  
end  //状态事件  
always@(posedge clk or negedge rst)begin  
if(!rst)  next_state <= 0;  
else begin  case(state)  S1: begin  if(data_tri >= 98)  next_state <= S2;  else  next_state <= state;  end  S2: begin  if(data_tri <= 2)  next_state <= S1;  else  next_state <= state;  end  default: next_state <= S1;  endcase  
end  
end  always@(posedge clk or negedge rst)begin  
if(!rst)begin  data_tri <= 0;  
end  
else begin  case(state)   S1 : data_tri <= data_tri + 1;  S2 : data_tri <= data_tri - 1;  default: data_tri <= 0;  endcase  
end  
end  

编写的测试文件:

`timescale 1 ns/ 1 ps  
module waveform_tb();  
// constants                                             
// general purpose registers  
// test vector input registers  
reg clk;  
reg rst;  
// wires                                                 
wire [7:0]  data_out;  
wire [6:0]  data_tri;  // assign statements (if any)                            
waveform i1 (  
// port map - connection between master ports and signals/registers     .clk(clk),  .data_out(data_out),  .data_tri(data_tri),  .rst(rst)  
);  
initial                                                  
begin                                                    clk = 0;  rst = 0;  #100 rst = 1;  
end                                                      
always   #10 clk <= ~clk;                                                
// optional sensitivity list                             
// @(event1 or event2 or .... eventn)                    endmodule  

三、实验结果

正弦波波形:

三角波波形:

注意事项:在正弦波形的仿真过程中遇到过读取ROM的数一直为零的情况,后来查询发现是因为.mif文件与工程不在同一目录。

本文大部分内容都属于原创,如需转载,请附上本文网站,
如果需要相关的仿真图、程序代码等资料可以直接私信我,我会及时回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HttpRunnerManager】搭建接口自动化测试平台操作流程

一、需要准备的知识点 1. linux: 安装 python3、nginx 安装和配置、mysql 安装和配置 2. python: django 配置、uwsgi 配置 二、我搭建的环境 1. Centos7 &#xff08;配置 rabbitmq、mysql 、Supervisord&#xff09; 2. python 3.6.8 &#xff08;配置 django、uwsgi&am…

解决本地jar包导入maven

1、确定是否安装maven 2、输入导入命令 命令说明 <path-to-file>为你jar包所在的路径&#xff08;尽量简单并且不要含中文&#xff09; <group-id>为grouId号&#xff0c;与<artifact-id>组成唯一识别你jar包的坐标&#xff0c;当不在公共资源jar包中&#…

git撤销还未push的的提交

怎样撤销掉上图中的提交呢 使用以下代码即可提交 git reset --soft HEAD^

MyBatis-Plus学习笔记总结

一、查询 构造器分为QueryWrapper和LambdaQueryWrapper 创建实体类User package com.system.mybatisplus.model;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.…

postman返回值乱码

描述&#xff1a; 在使用postman测试接口的时候&#xff0c;结果正常返回&#xff0c;但是乱码了&#xff0c;这个一般都是编码集设定的问题,后端接口是使用的springmvc Controller public class TestController(){RequestMapper("/test8")ResponseBodypublic Strin…

PHP8的多维数组-PHP8知识详解

今天分享的是php8的数组中的多维数组&#xff0c;主要内容有&#xff1a;多维数组的概念、创建和输出二维数组、创建和输出三维数组。 1、多维数组的概念 多维数组是包含一个或多个数组的数组。在多维数组中&#xff0c;主数组中的每一个元素也可以是一个数组&#xff0c;子数…

数字孪生的深海迷航

上世纪70年代&#xff0c;美国宇航局&#xff08;NASA&#xff09;筹划构建复杂的大型载人航天器。当时科学家们发现&#xff0c;航天任务进行当中&#xff0c;航天器的维护和修理面临着环境复杂、危险性高、故障不易排查等问题。 与其“盲人摸象”式的找故障&#xff0c;不如干…

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识&#xff0c;从而知晓YOLOv1到YOLOv4的发展源流和历史演进&#xff0c;进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括&#xff1a;YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…

用户体验设计师是什么,一篇文章读懂!

我是设计师l1m0&#xff0c;今天要给大家分享一个有趣的职业&#xff1a;UX设计师。 在我们日常生活中&#xff0c;我们无时无刻都在与产品发生交互行为&#xff0c;例如使用应用APP、访问网站、与实体陈燕萍进行交互&#xff08;例如试穿衣服&#xff09;或者享受某个服务&am…

No1.详解【2023年全国大学生数学建模竞赛】C题——蔬菜类商品的自动定价与补货决策(代码 + 详细输出 + 数据集代码 下载)

时间告诉你什么叫衰老,回忆告诉你什么叫幼稚。不要总在过去的回忆里纠缠,昨天的太阳,晒不干今天的衣裳。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客…

Unity 之Material 类型和 MeshRenderer 组件中的 Materials 之间有一些重要的区别

文章目录 区别代码例子 区别 在Unity中&#xff0c;Material 类型和 MeshRenderer 组件中的 Materials 之间有一些重要的区别。 Material 类型&#xff1a; Material 是 Unity 中用来定义渲染属性的资源。它包含了一系列定义了如何绘制一个对象的属性&#xff0c;比如颜色、纹…

mysql的索引语法

创建索引 CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name ( index_col_name,... ) ; 普通索引 name字段为姓名字段&#xff0c;该字段的值可能会重复&#xff0c;为该字段创建索引。 CREATE INDEX idx_user_name ON tb_user(name); 唯一索引 phone手机…

Go 基础15-在init()函数中检查包级变量的初始状态

从程序逻辑结构角度来看&#xff0c;包&#xff08;package&#xff09;是Go程序逻辑封装的基本单元&#xff0c;每个包都可以理解为一个“自治”的、封装良好的、对外部暴露有限接口的基本单元。一个Go程序就是由一组包组成的。 在Go包这一基本单元中分布着常量、包级变量、函…

探究Vue3中的Composition API:优化组件逻辑的新利器

一、toRef函数 在 Vue 3.0 中&#xff0c;引入了一种新的响应式 API,即 toRef。toRef 函数可以将一个普通值转换为响应式引用类型&#xff0c;这样就可以在模板中直接使用这个响应式引用类型的属性&#xff0c;并且当该属性发生变化时&#xff0c;视图会自动更新。 <templat…

兵者多诡(HCTF2016)

环境:https://github.com/MartinxMax/CTFer_Zero_one 题目简介 解题过程 登录首页 提交png图片上传抓包&#xff0c;可以看到是向upload文件提交数据 在fp参数中尝试伪协议读取home.php文件 http://127.0.0.1:88/HCTF2016-LFI/home.php?fpphp://filter/readconvert.base64…

Mybatis的关系关联配置

前言 MyBatis是一个流行的Java持久化框架&#xff0c;它提供了一种简单而强大的方式来映射Java对象和关系数据库之间的数据。在MyBatis中&#xff0c;关系关联配置是一种用于定义对象之间关系的方式&#xff0c;它允许我们在查询数据库时同时获取相关联的对象。 在MyBatis中&…

第17章 站点构建

mini商城第17章 站点构建 一、课题 站点构建 二、回顾 1、Gateway限流 2、Nginx限流 3、Redis集群应用 4、缓存灾难处理 三、目标 1、Sentinel Sentinel介绍 Sentinel核心功能 Sentinel集成Gateway Sentinel控制台 2、Lvs+Nginx集群 Lvs负载均衡模式 NAT模式 TUN模式 …

实现在外网SSH远程访问内网树莓派的详细教程

文章目录 如何在局域网外SSH远程访问连接到家里的树莓派&#xff1f;如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar4.2 cpolar进行token认证4.3 配置cpol…

HCIA自学笔记01-冲突域

共享式网络&#xff08;用同一根同轴电缆通信&#xff09;中可能会出现信号冲突现象。 如图是一个10BASE5以太网&#xff0c;每个主机都是用同一根同轴电缆来与其它主机进行通信&#xff0c;因此&#xff0c;这里的同轴电缆又被称为共享介质&#xff0c;相应的网络被称为共享介…

15:00面试,15:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…