FPGA学习笔记(八)

在verilog中基本逻辑单元分为两类时许逻辑和组和逻辑电路。区分方法,用always加时钟边沿检测的就是时许逻辑电路,其它的都是组合逻辑电路。组合逻辑电路赋值需要使用阻塞赋值,时许逻辑电路需要用非阻塞赋值。

当输入为wire类型时可以省略不写,在信号列表中无需体现信号的位数。

//四选一数据选择器,输入信号a,b,c,d,sel都为wire类型可以省略不写。
//sel位宽为两位,在信号列表中可以省略不写。
module mux4_to_1(a,b,c,d,sel,out);
input a,b,c,d;
input [1:0]sel;
output reg out;
always@(*)
begin
    case(sel)
    0:out=a;
    1:out=b;
    2:out=c;
    default out=d;
end
endmodule

使用always时只有敏感条件为取边沿检测时才需要写铭感条件,其实时候敏感列表为“*”。

case中的x与z的用法,x和z可以用在case的后面,组成casex与casez,或者用在case的分支项。使用case时表达式需要与分支项相同,使用casez时表达式与分支向中除有z或?的那一位,其他位数需要相同,使用casex时表达式与分支项除有z或x或?的位数,其它位数需要一致。

同步复位与异步复位

同步复位是与时钟同步的复位,异步复位为无需时钟的边沿检测

//异步复位,只要clear信号为1时直接清零cnt
module counter(cnt,clear,clock);
input reg [3:0] cnt;
input clear,clock;
always@(posedge clear or negedge clock) 
    if(clear==1)cnt<=0;
    else cnt<=cnt+1;
endmodule

//同步复位,当clear为1时不会立刻复位,需要等待时钟的下降沿到来后才进行清除
module counter(cnt,clear,clock);
input reg [3:0] cnt;
input clear,clock;
always@(negedge clock) 
    if(clear==1)cnt<=0;
    else cnt<=cnt+1;
endmodule

“?”的嵌套用法

//使用assign和“?”写出case或if的用法
reg [1:0] sl;
reg a,b,c,d;
assign out = (sl==0)?a:
             (sl==1)?b:
             (sl==2)?c:d;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值