Verliog语法(程序)

Always blocks(conbinational)(总是阻塞(组合))

assign 语句的左侧必须是线网类型,而过程赋值(在 always 块中)的左侧必须是寄存器(reg)类型

 Always blocks(clocked)(总是阻塞(时钟))

这里主要讲阻塞赋值与非阻塞性赋值。通常阻塞赋值用于逻辑电路,非阻塞性赋值用于时序电路。

阻塞性赋值也是一句一句执行的,即一句话在上一句结束后才执行赋值。而非阻塞性赋值,是并行执行的。

 If statement( If 模块)

  If statement lanch( If 模块的锁存器)

我们再写if或者case语句一定要写出else/default,以避免综合时出现锁存器,这是电路不希望的。因为锁存器很容易在信号上产生毛刺;而且也没有时钟信号,不容易进行静态时序分析。

 case statement( case 模块)

priority encoder(优先编码器) 

priority encoder with case(带casez的优先编码器) 

casez语句用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。使用过程中?与z一样。case语句是顺序执行的,其实是个很大的组合逻辑。

也有一种case(1'b1)的写法,也想记录一下如这种,意思为先判断in[0]是否为1,如果为1则执行对应命令,否则去判断in[1]。以此类推

            case(1'b1):
       
                in[0]: pos = 0;
                in[1]: pos = 1;
                in[2]: pos = 2;
                in[3]: pos = 3;
                default: pos = 0;
            endcase

这题我虽然做对了,先放代码如下

module top_module (
    input [7:0] in,
    output reg [2:0] pos );
always @(*) begin
    casez (in)
        8'bzzzzzzz1: pos = 0; 
        8'bzzzzzz1z: pos = 1;
        8'bzzzzz1zz: pos = 2;
        8'bzzzz1zzz: pos = 3;
        8'bzzz1zzzz: pos = 4;  
        8'bzz1zzzzz: pos = 5;
        8'bz1zzzzzz: pos = 6;
        8'b1zzzzzzz: pos = 7;
        default: pos = 0;
    endcase
end
endmodule

但是我看仿真图总感觉怪怪的,就像当输入为10时,输出居然是4???,希望也有人指正

 我用同样的代码,在别的仿真软件上跑了一下,同样的代码发现结果是不一样的,可能是网站的一点问题吧。有没有和我同感这个优先编码器,优先的低位的感觉很不舒服哈哈哈~

Avioding latches(避开锁存器)

module top_module (
    input [15:0] scancode,
    output reg left,
    output reg down,
    output reg right,
    output reg up  ); 
	always @(*) begin
    casez (scancode)
        16'he06b:  begin  left=1;down=0;right=0;up=0;end
        16'he072:  begin  left=0;down=1;right=0;up=0;end
        16'he074:  begin  left=0;down=0;right=1;up=0;end
        16'he075:  begin  left=0;down=0;right=0;up=1;end
        default:  begin  left=0;down=0;right=0;up=0;end
    endcase
	end
endmodule

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值