FPGA初次尝试

本文详细介绍了在Quartus II中使用Verilog进行设计,强调模块名称与文件、项目的一致性以避免错误。重点讲解了Modelsim仿真过程,包括添加Testbench,编写仿真程序,以及如何根据代码修改重新编译。同时,给出了具体的Verilog代码实例,展示了定时器的设计,并提供了相应的Testbench代码,用于验证设计功能。
摘要由CSDN通过智能技术生成

quartus II易错

编写verilog语言并编译

在这里插入图片描述
module名字要和文件名字一样,这个名字也要尽量和项目名字一样,这样不容易出错

modelsim仿真

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
再添加testbench,自己写仿真程序

modelSim 重复仿真

在这里插入图片描述
假设修改了testBench程序文件或者元器件程序,要重新编译一下
在这里插入图片描述

在这里插入图片描述
选择要重新编译的两个文件,从新编译
然后打开仿真文件
在这里插入图片描述
在这里插入图片描述
拉到最底下选work里面的testBench文件,然后确定
在这里插入图片描述
然后最左边instance那里,ctrl+w添加波形,然后
在这里插入图片描述
在这里插入图片描述

restart和run进行仿真。记得中间是总时间长度

仿真波形输出十进制

在这里插入图片描述

课设源代码

module xiyiji
#(
        parameter set_cnt_min = 25'd10
)
(
        input wire sys_clk,
        input wire sys_work,
        output wire [24:0] out_sec,
        output wire [24:0] out_min,
        output wire [0:0] is_finish
);
        reg [24:0] cnt_sec=25'd20;
        reg [24:0] state=25'd0;
        reg [24:0] cnt_min=set_cnt_min;
        always @(posedge sys_clk or negedge sys_work)
                
                if(sys_work==1'b0)begin
                        //不工作的时候设置为初始值
                        cnt_sec<=25'd20;
                        state<=25'd0;
                        cnt_min<=set_cnt_min;
                end
                else if(cnt_min==25'd0)begin
                        cnt_min<=cnt_min;
                        cnt_sec<=25'd0;
                        state<=25'd0;
                end
                else if(cnt_sec==25'd0)begin
                        if(state==25'd3&&cnt_min==25'd1)begin
                                //结束了
                                state<=25'd0;
                                cnt_min<=25'd0;
                                cnt_sec<=25'd0;
                        end
                        else if(state==25'd3)begin
                                //一个轮回结束了
                                state<=25'd0;
                                cnt_min<=cnt_min-25'd1;
                        end
                        else begin
                                //一个中间状态跳转到另一个中间状态
                                state<=state+25'd1;                
                        
                        end
                        cnt_sec<=(state==25'd1||state==25'd3)?25'd19:25'd9;
                end
                else begin
                        cnt_sec<=cnt_sec-25'd1;
                end
        assign out_sec=cnt_sec;
        assign out_min=cnt_min;
        assign is_finis=(cnt_min==25'd0)?1'b1:1'b0;


endmodule
`timescale  10ns/1ns
module  tb_led();

reg sys_clk;
reg sys_work;
wire [24:0] out_sec;
wire [24:0] out_min;
wire [0:0] is_finish;

initial
    begin
        sys_clk=1'b1;
        sys_work<=1'b0;
        #20
        sys_work<=1'b1;
    end    
always #10 sys_clk=~sys_clk;
xiyiji 
#(
    .set_cnt_min(25'd8)
)
xiyijiInst(
.sys_clk(sys_clk),
.sys_work(sys_work),
.out_sec(out_sec),
.out_min(out_min),
.is_finish(is_finish)
);

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值