经过几年代码学习,发现了一些优雅的表示方式,他们有一些特点:例如看起来逼格很高,或者提高运行效率,简化代码等等
1
第一种在afs课上学到的,如果有多个变量综合起来作为switch的情况,可以使用。
比如在想处理a,b,c三个变量取True和false的8种情况:
switch(!!a*4+!!b*2+!!c){
case 0: //000
break;
case 1://001
break;
case 2://010
break;
...
case 7: //111
break;
}
两个取反是为了把变量强制转化为0或者1
2
如果函数参数很多,希望每个参数都进行注释:
public void lotsOfArgFunction(
arg1,//this is arg1
arg2,//this is arg2
arg3,//this is arg3
...
arg8//this is arg8
){
//函数体
}
同理,如果调用时想要对参数进行注释,也可以这样。
IDEA在注释时,对于立即数参数会自动进行注释,而我们可以这样:
loasOfArgFunction(
/*put arg1*/arg1,
/*put arg2*/arg2,
/*put arg3*/arg3
);
3
verilog中,对于多路选择器,通常只能用switch case来模拟。问题在于综合出来会多出寄存器,这样让人很不舒服
直到某天看到人家写的lab,才知道应该这样写:
assign out = {32{condition1}} & signal1 ||
{32{condition2}} & signal2 ||
...
{32{condition8}} & signal8 ;
这样从condition中选择了若干个signal
而且对于条件判断,通常新增加一个wire变量,然后判断该变量,比如
if(in == 0x1000 && it == next) begin
//do something
end
最好写成这样:
assign in_choose = in == 0x1000;
assign unchange = it == next;
if(in_choose && unchange) begin
//do something
end
这是因为verilog综合的时候就是按照两个信号来综合的,这样更加贴近电路真实情况。
4
c语言变量,变量名一般都选择小写字母+下划线,比如 set_signal
c++或者java,变量名一般选择驼峰命名法,如果是类则是大驼峰: SetSignal,
如果是函数或者变量,一般是小驼峰: setSignal
python,类使用开头大写+下划线: Set_signal
变量使用小写+下划线: set_signal
5
这是我看linux 内核的写法,如果想要for或者if在一行解决,但是又不想加括号:
for(int i = 0; i < NR_TASK; i++){
if(c > task[i]->counter)
c = task[i]->counter, break;
}
这样虽然比较简介,但是容易出错,所以还是小心一点。