Verilog常识

前言

很多刚入门的小伙伴会问很多最基本的Verilog语法常识,我都会给他们说,好好把语法书看一下,但是一般的语法书内容都比较多,对于刚入门来说很难在短时间内抓住重点,为此我专门写这样一篇博客,希望对刚入门的同学有所帮助,该篇博客我会根据在具体的培训和指导过程中所遇到的问题进行更新,欢迎大家持续观注!

常识

以下面这段程序为例

reg	[7:0]	cnt;
always@(posedge clk or negedge rst_n)
	begin
		if(!rst_n)
			cnt<=8'd0;
		else 
			cnt<=cnt+1;
	end
  1. 这是我们在写程序会经常用到的一个always语句块。括号里面( clk, rst_n)是敏感信号,posedge是上升沿的意思,negedge表示下降沿。所以这句话的意思就是说,当检测到clk的上升沿或者rst_n的下降沿,那么就执行begin end中的操作。
  2. 我们定义了一个8位位宽的寄存器cnt。有同学会问为什么会是8位呢?[7:0]从0到7总共是不是8个数,所以这就是一个8位位宽的寄存器,如果是[3:0],那就就是4位位宽
  3. 疑问一个接一个,我们为什么要定义8位,而不定义成其它位宽呢?好,不着急,我们一个一个来回答。我们会根据具体的项目需要来选择我们寄存器位宽,比如,我们有一个计数值,需要计数到100。我们用计算器转换成二进制为1100100,总共是7位,那么我们这个寄存器定义成7位就行,当然我们也可以定义成比7位多,比如8位,9位等等,但是位宽越宽,所占用的逻辑资源就越多,所以,我们最好是需要几位就定义几位。切岂,不要定义得比需要的位宽少,否则就满足不了我们的要求,还是刚才那个例子,假如我们定义成6位,那么一个6位的寄存器总共可以计数到6‘b111111,十进制为63,根本没办法计数到100.所以这样定义便会导致我们的程序出不了我们想要的结果。
  4. 程序中8’d0表示什么意思?8表示8位,d表示十进制,0表示具体的数值。b表示二进制,h表示十六进制。我们多举几个例子,大家就知道是什么意思了。
    7’b0111111:表示七位二进制数,等于十进制的7’d63,十六进制的7’h3f
    5’b10100:表示5位二进制数,等于十进制的5’d20,十六进制的5’h14
    5.程序中<=表示什么意思?在我们现在的程序中,表示赋值的意思。在此不是小于等于,一定不要搞混了。如果<=出现在逻辑判断中,比如 if(cnt<=8’d50),在这个地方就是小于等于的意思。同学们好好领悟一下。
  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值