HDLBits学习笔记

目前刚做完Verilog language模块,遇到的大多数都是基础题,作为初学者还是有不少的错误的,大概记录一下

Module shift8

1、always中不能使用assign
2、case语法使用错误
3、题中sel为2位且为十进制,2'dxxx
4、声明q1,q2,q3未设置位数,导致电路对输出错

Module cseladd

1、声明sum时需要用到reg而不能使用wire

Always if

1、条件语句可以使用assign a = (condition) ? x:y;或if语句

三目运算符:(condition ? if_true : if_false)

Always if2

避免锁存器的方法
1、case语句确收defult
2、if语句加else,或对信号进行赋初值
3、always中在赋值表达式右侧出现的信号必须出现在always@(敏感电平信号)中列出

Always casez

casez 将数值中的z视为不在乎

Bcdadd100

刚开始用的是always语句一直会报错,通过搜索发现应该使用generate语句,不是很理解,后面再思考一下
generate语句的用法
1、用来构造循环语句,用来多次实例化某个模块
2、构造if-generate或case-generte语句,用力在多个模块中至多选择一个模块
3、用来断言
在使用generate语句时必须且仅能使用genvar来定义循环变量;循环语句需要有模块名定义在begin之后
 

genvar i;//i为正整数循环变量
 
generate for() 
    begin:ava //begin后跟模块名
    /*
        
        需要循环的代码

    */
    end
 
endgenrate

补充几个比较基本的概念:always模块中赋值左侧仅能为reg类型变量;assign用于给wire变量进行赋值

阻塞赋值(a=b)

1、赋值语句立即执行,运行完该语句后才运行下一句

2、运行至此,赋值语句左侧变量值立即改变

非阻塞赋值(a<=b)

1、执行至此,先计算<=右侧值,但不会立即给左侧变量进行赋值

2、always代码块执行完毕后才完成赋值操作

何时使用

1、时序电路中使用非阻塞赋值

2、always建立组合逻辑电路模型时使用阻塞赋值

3、在同一个always块中如同时存在时序和组合逻辑电路时,使用非阻塞赋值

4、严禁在always中同时使用非阻塞和阻塞赋值

5、严禁在多个always块中对同一个变量进行赋值

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值