数电课程设计

这篇具有很好参考价值的文章主要介绍了数电课程设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

课设一:加减计数器

一、实验内容

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

二、实验步骤

(1)安装软件

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

(2)创建工程

数电课程设计,FPGA,fpga开发,课程设计

(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

三、实验结果

数电课程设计,FPGA,fpga开发,课程设计

课设二:交通信号灯

一、实验内容

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

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

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

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

数电课程设计,FPGA,fpga开发,课程设计

二、实验步骤

(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的转换:

数电课程设计,FPGA,fpga开发,课程设计

S3到S2的转换:

数电课程设计,FPGA,fpga开发,课程设计

S2到S4的转换:

数电课程设计,FPGA,fpga开发,课程设计

S4到S1的转换:

数电课程设计,FPGA,fpga开发,课程设计

课设三:波形发生器

一、实验内容

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

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

  • 实验步骤

    跳过创建工程的过程。

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

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

创建单端ROM的IP核。

数电课程设计,FPGA,fpga开发,课程设计

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

数电课程设计,FPGA,fpga开发,课程设计

添加.mif文件

数电课程设计,FPGA,fpga开发,课程设计

编写的.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  

三、实验结果

正弦波波形:

数电课程设计,FPGA,fpga开发,课程设计

三角波波形:

数电课程设计,FPGA,fpga开发,课程设计

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

本文大部分内容都属于原创,如需转载,请附上本文网站,
如果需要相关的仿真图、程序代码等资料可以直接私信我,我会及时回复。文章来源地址https://www.toymoban.com/news/detail-706963.html

到了这里,关于数电课程设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(1)设计一个汽车尾灯自动控制系统

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客   目录 一.题目要求 二.代码部分 2.1  car_system.v  2.2  divide.v 三.管脚分配

    2024年02月05日
    浏览(59)
  • 【FPGA】课程设计:简单计时器闹钟

    本文是EDA实验的课程设计 完整源码文件获取方式见文末 少废话,先看东西。 EDA实验-闹钟演示视频 设计一个电子闹钟。要求电路上电后自动计时,到达预置的闹响时刻后,由蜂鸣器发出音乐报警。闹响时刻可利用按键设置,设置范围0~999999。 此次实验除了满足上述基本功能

    2024年02月04日
    浏览(47)
  • 基于FPGA的数字电子琴——数电小系统设计【数字电子技术】(使用Vivado中的verilog语言)含piano代码文件(全)

    目录 一、电路功能描述 二、方案设计 1. 总体设计方案 2. 对原理框图或程序流程图做出简单解释 3. 各模块介绍 3.1 音频驱动模块 3.2 LED显示模块 3.3 数码管显示模块 3.4 矩阵键盘模块 3.5 PS2机械键盘模块 3.6 时钟分频模块 3.7 曲谱生成模块 三、总结 数码管和LED显示模块 矩阵键盘

    2024年02月06日
    浏览(55)
  • 6设计指令流水线-1【FPGA模型机课程设计】

    2023-5-25 09:25:05 以下内容源自《【FPGA模型机课程设计】》 仅供学习交流使用 0集中实践环节计划书【FPGA模型机课程设计】 2023-5-30 16:03:03 添加MEM_WB模块 2023-5-30 19:00:25 IF模块添加stall 2023-5-30 21:08:26 修改stall相关的处理 在id ctrl 流水寄存器中修改 因为原来没有理解stall[5:0]是什么

    2024年02月08日
    浏览(49)
  • 3模型机指令系统设计-1【FPGA模型机课程设计】

    2023-5-23 08:02:23 以下内容源自《【FPGA模型机课程设计】》 仅供学习交流使用 0集中实践环节计划书【FPGA模型机课程设计】 第一周周三: 模型机指令系统设计。学生根据搭建的模型机数据通路图,选择扩展的指令格式和指令功能。扩展指令系统的选择可以参照MIPS 32位处理器指

    2024年02月09日
    浏览(37)
  • 3模型机指令系统设计-3【FPGA模型机课程设计】

    2023-5-23 15:48:49 以下内容源自《【FPGA模型机课程设计】》 仅供学习交流使用 0集中实践环节计划书【FPGA模型机课程设计】 第一周周三: 模型机指令系统设计。学生根据搭建的模型机数据通路图,选择扩展的指令格式和指令功能。扩展指令系统的选择可以参照MIPS 32位处理器指

    2024年02月09日
    浏览(35)
  • 3模型机指令系统设计-2【FPGA模型机课程设计】

    2023-5-23 08:02:23 以下内容源自《【FPGA模型机课程设计】》 仅供学习交流使用 0集中实践环节计划书【FPGA模型机课程设计】 第一周周三: 模型机指令系统设计。学生根据搭建的模型机数据通路图,选择扩展的指令格式和指令功能。扩展指令系统的选择可以参照MIPS 32位处理器指

    2024年02月09日
    浏览(93)
  • 数字系统设计(FPGA)课程设计: 多功能数字钟

    一、目的: 实现多功能数字钟,具备下列功能: 1、数字钟:能计时,实现小时、分钟、秒的显示; 2、数字跑表:精度至0.01秒 比如显示12.97秒; 3、闹钟: 可以设定闹钟,用试验箱上的蜂鸣器作为闹铃; 4、调时:可以对时间进行设定; 5、日期设定:能设定日期并显示当前

    2023年04月18日
    浏览(47)
  • 5模型机整体的联调【FPGA模型机课程设计】

    2023-5-25 08:15:05 以下内容源自《【FPGA模型机课程设计】》 仅供学习交流使用 0集中实践环节计划书【FPGA模型机课程设计】 第一周周五: 模型机整体的联调。完成模型机指令系统实现。学生根据设计好的指令系统实现方案,在Modelsim上进行功能仿真。要求将所有设计的机器指令

    2024年02月08日
    浏览(39)
  • FPGA课程设计——数字电子时钟VERILOG(基于正点原子新起点开发板,支持8位或6位共阳极数码管显示时分秒毫秒,可校时,可设闹钟,闹钟开关,led指示)

    2019   级    电子科学与技术   专业FPGA课程设计 报   告 2022  年 5 月 20 日 多功能数字电子钟的设计 摘要 电子设计自动化(EDA)是一种实现电子系统或电子产品自动化设计的技术,使用EDA技术设计的结果既可以用FPGA / CPLD来实施验证,也可以直接做成专用集成电路(ASIC)。

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包