fpga基础-Altera自学笔记

本文介绍了一个使用Verilog编写的LED灯控制模块,模块通过检测系统时钟和复位信号来控制LED灯的输出状态。代码中包含同步复位和异步复位两种情况,当检测到复位信号时,LED灯的输出将被重置。此外,文章还列举了Verilog编程的一些基础知识,如模块声明、变量类型、阻塞与非阻塞赋值以及计数器的实现等。
摘要由CSDN通过智能技术生成

一、野火点灯代码(巩固记忆)

module  flip_flop
(
    input   wire    sys_clk     ,   //系统时钟50Mhz
    input   wire    sys_rst_n   ,   //全局复位
    input   wire    key_in      ,   //输入按键

    output  reg     led_out         //输出控制led灯
);

//同步复位
//led_out:led灯输出的结果为key_in按键的输入值
always@(posedge sys_clk)    //当always块中的敏感列表为检测到sys_clk上升沿时执行下面的语句
    if(sys_rst_n == 1'b0)   //sys_rst_n为低电平时复位,但是这个复位有个大前提,那就是当sys_clk的上升沿到来时,如果检测到sys_rst_n为低电平则复位有效。
        led_out <= 1'b0;    //复位的时候一定要给寄存器变量赋一个初值,一般情况下赋值为0(特殊情况除外),在描述时序电路时赋值符号一定要使用“<=”
    else
        led_out <= key_in;

/*
//异步复位
//led_out:led灯输出的结果为key_in按键的输入值
always@(posedge sys_clk or negedge sys_rst_n) //当always块中的敏感列表为检测到sys_clk上升沿或sys_rst_n下降沿时执行下面的语句
    if(sys_rst_n == 1'b0)                     //sys_rst_n为低电平时复位,且是检测到sys_rst_n的下降沿时立刻复位,不需等待sys_clk的上升沿来到后再复位
        led_out <= 1'b0;
    else
        led_out <= key_in;
 */

endmodule

1.1 verilog知识小点

1、模块开头用module,结束用endmodule。

2、regalways@(posedge sys or negedge rst)【时序逻辑】中用<=(非阻塞赋值)来赋值。

3、wireassign【组合逻辑】中用=(阻塞赋值)来赋值。

4、输入变量声明常用 input wire  [3:0]  key,  //此声明的是一个4位的输出名为key变量。不写明位长度默认是1位

5、输出变量声明常用output reg [7:0] led, //用时序逻辑赋值的一个8位的输出名为led变量。

6、注意变量声明的括号()里面最后一个变量声明后不加英文逗号,之前声明的变量语句后都要加上逗号。如 module led(input wire key,output reg led);always(*) begin led<=key;  end     endmodlue

7、Verilog中数字的写法,一位二进制是1‘b1或1’b0两位二进制是2‘b10或2‘b1_0(加上下划线为了方便观察)。二十六位的十进制是26’d50_000_000(这是一个26位宽的数,十进制是五千万)

8、parameter  a=100;//用这个语句声明本地a的值位100. 又如parameter  b=10’d1;

1.2 开发常用语句

1、if() else()//注意一定要加上else,不然可能会产生锁存器。不要像c语言一样乱用。

2、case(sel)

        1'b0:led<=key_one; 

        1'b1:led<=key_two;

        default:led<=key_one; //语句后要加分号,注意一定要加上default,不然可能会产生锁存器。

      endcase

3、assign led=key;//组合逻辑

      always@(posedge sys or negedge rst)//时序逻辑

     begin

     end

4、大括号{ }可以拼接变量  out<={key_one[2:0],key_two[1:0]}//将一个3位变量和一个2位变量连接起来非阻塞赋值<=给5位变量out。

     <<,>>可以移位。

     <,>,<=,>=可以用来比较大小。

     +,-,*,/,%运算

     &&,||语句的与或运算

5、计数器

always@(posedge sys or negedge rst)

begin

if(rst==1‘b0)

        count<=25'd0;

else if(count==count_max-1'b1)

        count<=25'd0;

else

        count<=count+1'b1;

end

二、实战点灯,从画波形->到建立工程->到写代码->到仿真。

还没结束,下次笔记继续///

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值