kcjf.net
当前位置:首页 >> vErilog中CAsE语句含义 >>

vErilog中CAsE语句含义

一个块下的case语句的各种情况.比如case(x)1:2:3:都是并行的,同时判断每个情况是否执行,而不是依次判断.就是每个情况都单独耗费了器件.

首先从软件角度考虑 if加若干个else if可以组成一个与case类似的功能 但需要注意的是if-else if是有优先级的,也就是第一个if不成立的话,才判断第二个else if 那么问题就来了,如果这个if组合里有10个else if条件,那么逻辑就需要做一个在一个

1.冒号前面表示触发条件,冒号后面表示在该条件下,执行的操作2.你上面写的代码貌似有问题,如果直接用assign对mask赋值的话,那么mask必须为wire型;

case语句在条件比较简单的情况下适用,诸如a=1,2,3,4,5,6等等.if else 语句基本上可以处理所有的复杂判定条件,但是在实际电路中占用更多的资源.所以如果可以用case语句的话尽量用case语句.

比如select = 8'b1111_0101; 那么select[1:2] 为 10.如果【待定值】等于case中的select[1:2](10),那么这条case语句就被执行.

在这里不能以C语言的语法来理解这段逻辑,应该考虑case语句在verilog里面综合完之后生成的什么电路.case语句是分支比较语句,也就是说,本质上就是case后面括号中的值与下面每个分支开头的值作比较,相同则执行.看你在楼上的代码,因该是licSeq的哪一位等于1,就执行哪一个对应分支语句.

比如你定义一个14位状态变量A_cnt[13:0],那么代码编写如下:alawys @(*)begin case(A_cnt[13:0]) 14'b00000000000011://3 begin ####### end14'b00000000000100://4 begin ####### end14'b00000001010000://80 begin ####### end default begin endendcaseend个人认为是这样,或者是我理解错了你的意思.不过你要是从3写道80,这样太麻烦了,你可以用嵌套来写就简单多了.有问题大家继续讨论.

switch case语句是判断语句.switch的用法是判断case后面的表达式和switch后面的表达式是否相匹配,一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break.

你的always语句写的不对吧.

always @(EN or DIN) if(EN) case(DIN) 8'b1111_1110: KEY = 4'b0001; 8'b1111_1101: KEY = 4'b0010; 8'b1111_1011: KEY = 4'b0011; 8'b1111_0111: KEY = 4'b0100; 8'b1110_1111: KEY = 4'b0101; 8'b1101_1111: KEY = 4'b0110; 8'b1011_1111:

网站首页 | 网站地图
All rights reserved Powered by www.kcjf.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com