数电课程设计

news2025/1/13 8:02:04

为了帮助大家更好学习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)begin

if(!rst)begin

       count <= 0;                 //复位

end

else if(flag==1)begin

      if(count<99)

       count <= count + 1;     //flag为1,是加法计数器

      else

       count <= 0;              //计到99复位

end



else begin

      if(count==0)

       count <= 99;             //计到0复位

      else

       count <= count - 1;     //flag为0,是减法计数器

end



end







endmodule

编写的textbench文件:

`timescale 1 ns/ 1 ps

module counter_tb();

// constants                                          

// general purpose registers

// test vector input registers

reg 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;
end

sinROM 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.coloradmin.cn/o/998831.html

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

相关文章

Kubernetes dashboardv2.7.0安装指南:从零开始搭建可视化界面

一、K8S管理控制台 Kubernetes Web UI&#xff08;或Kubernetes Dashboard&#xff09;是用于管理和监视Kubernetes集群的不同工具和用户界面。以下是一些常见的Kubernetes Web UI工具和用户界面&#xff1a; Kubernetes Dashboard: Kubernetes官方提供的Web用户界面&#xf…

工业化生产预测(xgboost)(笔记版)

数据任务概述 任务目标&#xff1a;利用异烟酸生产过程中的各参数&#xff0c;预测最终异烟酸的收率 数据集包括生产工程中10个步骤的参数&#xff0c;样本id、A1-A28、B1-B14包括原料、辅料、时间、温度、压强等以及收率 本项目为回归预测任务 生产各个环节的特征以及相关时…

第34章 IOCTL驱动传参实验

用户如果要对外设进行操作&#xff0c;对应的设备驱动不仅要具备读写的能力&#xff0c;还需要对硬件进行控制。以点亮LED灯驱动实验为例&#xff0c;应用程序通过向内核空间写入1和0从而控制LED灯的亮灭&#xff0c;但是读写操作主要是数据流对数据进行操作&#xff0c;而一些…

C++解析XML文件(TinyXML)

简介 TinyXML是一个开源的解析XML的解析库&#xff0c;能够用于C&#xff0c;能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件&#xff0c;然后在内存中生成DOM模型&#xff0c;从而让我们很方便的遍历这棵XML树。 TinyXML库下载 本文所用库文件来自 TinyXML …

阿里云WAF应用防火墙核心概念与购买使用

文章目录 1.WAF应用防火墙基本概念1.1.什么是WAF防火墙1.2.WAF的主要功能1.3.WAF应用防火墙的应用场景1.4.网站接入WAF应用防火墙架构图 2.开通WAF防火墙产品 1.WAF应用防火墙基本概念 官方文档&#xff1a;https://help.aliyun.com/document_detail/28517.html 1.1.什么是WA…

【ccf-csp题解】第四次csp认证-第四题-网络延时-树的直径

题目描述 思路分析 本题所求的实际上是树的直径&#xff0c;即树中的任意两个结点之间的最大距离 采用的方法是dfs 从根节点开始遍历&#xff0c;对于每一个被dfs的结点m&#xff0c;返回此结点m到所有叶子结点的距离最大的那个即d1&#xff0c;同时在dfs过程当中记录结点m到…

修改conda 虚拟环境下的PS1提示符格式

问题&#xff1a; 终端命令提示符太长了&#xff0c;严重影响工作效率 解读办法&#xff1a; conda env config vars set PS1(nyang)[\u\h \W]$效果&#xff1a; so beautiful !!!

【Redis】4、rsync远程同步

与inodify结合使用&#xff0c;实现实时同步 rsync简介 rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09;是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录树&#xff0c;&#xff1b;支持增量备份&#xff0c;并保持链接和权限&#…

四叶草clover配置工具:Clover Configurator for Mac

Clover Configurator是一款Mac上的工具&#xff0c;用于配置和优化Clover引导加载器。Clover引导加载器是一种用于启动macOS的开源引导加载器。它允许用户在启动时选择操作系统和配置启动选项。 Clover Configurator提供了一个可视化的界面&#xff0c;让用户可以轻松地编辑和…

极光笔记 | 推送服务数据中心选择:合规性与传输效率的双重考量

随着全球化进程的深入&#xff0c;跨境数据传输与存储问题已经变得愈发重要。推送服务的数据中心节点选择不仅关乎数据访问速度和用户体验&#xff0c;同时也直接牵扯到数据合规性和安全保障。EngageLab Push深知这一点&#xff0c;为了满足更多国际客户和全球用户触达需求&…

uniapp打包安卓apk的隐私政策配置

uniapp打包安卓端app的隐私政策配置 1、隐私政策配置位置 2、uniapp项目配置文件代码 androidPrivacy.json {"version" : "1","prompt" : "template","title" : "用户服务协议和隐私政协议","message&quo…

JAVASE事件监听

代码&#xff1a; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner;import javax.swing.JButton; import javax.…

管理类联考——数学——汇总篇——知识点突破——应用题——最值问题

⛲️ 一、考点讲解 最值问题是应用题中最难的题目&#xff0c;也是考生普遍丢分的题目。最值问题一般要结合函数来分析&#xff0c;一般结合二次函数和平均值定理求解。最值问题的求解步骤是&#xff1a;先设未知变量&#xff0c;然后根据题目建立函数表达式&#xff0c;最后利…

HT for Web (Hightopo) 使用心得(1)- 基本概念

Hightopo 公司 3D 可视化产品有对应的官方手册。但是这些手册内容比较多。对于想学习的新同学来说可能相对比较繁琐。这里本人根据个人使用经验做了一些总结。希望对读者有所帮助。 本文会提到一些前端开发的概念&#xff0c;如 H5, JavaScript&#xff0c;JSON 等。没有开发经…

【linux input子系统-01】核心层、事件处理层、设备驱动层

简介 input子系统的三层&#xff1a; 核心层&#xff1a;为事件处理层、设备驱动层提供接口&#xff0c;并在input_handler和input_dev之间建立关联&#xff1b;事件处理层&#xff1a;内核对象对应input_handler&#xff0c;用于接收-解析-处理设备驱动层上报的输入事件&…

借助VScode将 Docker 容器用作开发环境

参考 借助 Visual Studio Code 将 Docker 容器用作开发环境 - Training | Microsoft Learn 存在的问题 Remote-SSH XHR failed无法访问远程服务器 【VScode】Remote-SSH XHR failed无法访问远程服务器_SuperSources的博客-CSDN博客 可能是网络问题&#xff0c;打开vpn 就可以正…

探索GreatADM:如何快速定义监控

引文 在数据库运维过程中&#xff0c;所使用的运维管理平台是否存在这样的问题&#xff1a; 1、默认监控粒度不够,业务需要更细颗粒度的监控数据。2、平台默认的监控命令不适合,需要调整阈值量身定制监控策略。3、不同类型的实例或组件需要有不同的监控重点,但管理平台监控固…

【云原生】kubectl常用命令大全

目录 一、资源管理方法 kubectl 的命令大全 二、 kubectl常用命令大全 2.2 项目的生命周期&#xff1a;创建-->发布-->更新-->回滚-->删除 1、创建 kubectl create命令 2、发布 kubectl expose命令 3、更新 kubectl set 4、回滚 kubectl rollou…

什么是实时监控系统?

监控报警器在工业生产和电子行业中广泛应用。其中包括数据收发器、多功能监控报警器、人体接地监控器、手腕带监控报警器等等。 通过网络把“静电监测设备”、“接地监控报警器”、“数据转换器”、“计算机”等设备连接起来&#xff0c;连接成一个完整的静电实时监控系统。缺一…

u盘制成系统盘之后如何让恢复普通盘

U盘装完pe后怎么还原成普通U盘 1.插入U盘&#xff0c;按WindowsR 输入diskpart 2.输入“list disk”回车&#xff0c;查看U盘代号&#xff0c;例如下图里我的U盘代号是磁盘1&#xff08;你的不一定是1&#xff0c;一定要分清楚&#xff09; 3.输入“select disk 2”选中U盘磁…