时间感悟
原来时间是从头上走进人生,有了时间,我们一个个从幼稚无知的天真儿童,进小学、中学、大学,从园丁老师那里汲取知识的乳汁,成为精神饱满,有思想,有理想,在人生坎坷的大道上打拼的人。怪不得先人们箴言:三十余立,四十不惑!不惑的年龄,可能这是时间老人给人类一个共同的参考标准答案,过中的好与坏,惑与不惑,全在各人把握。
所以,有一天我突发奇想,时间是在腰、臂上驻足的。就如爬壁虎藤缠住树干、高墙一样,一个孱弱的躯体,变成身材魁梧,敢于把酒问青天、问苍茫大地谁主沉浮的人物,是时间老人在这个生命之躯播下了知识、理想,也是时间老人提供的营养。
时间,还是从脚下溜掉的。春江水暖鸭先知,人老更是脚先硬,蹒跚的老者,哪个不是感叹腿脚不好使唤。至于白发鬓鬓,两眼昏花,也是脚下溜走岁月后的铁凿证据,因此,人们为了扎紧时光溜走的口袋,发展体育运动,拼命增强体质,企图延年益寿,也好让时间在本来短暂的人生稍稍作更长的停顿。但是,稍长的时日人们会做些什么,是打牌、游乐,充当酒囊饭袋,还是做些有益于社会、人类的事,这又常常令人困扰,夕阳无限好,发出可惜尽黄昏的感叹,答案是否就是济民救国,只有用每个人生天平的砝码去衡量,只有人生的追求和信仰才能读白、诠释!
当然,我们大都是些平凡百姓,要济民救国,往往也不一定力所能及,但我们如果一味去追求生命的更长,做个对自己没有生活质量,对社会没有贡献的行路过客,计较长短的意义又在哪里呢?
人的时间是这样从上到下走过的,刚坠地的娃娃一声啼哭,如果接生婆婆先看见的不是毛绒绒的头发,会大惊不已,发出难产的怪叫!其实,时间对树木也莫不是如此,春天到了,万木逢春,尖尖的小芽,嫩嫩的新绿,或破土而出,或临风弄姿,树的生命就已写进了春天,它存在的意义挂上了枝头、闪耀在薄薄的露珠里。夏天到了,充足的阳光豪无保留地进驻肥大厚实的叶片内脏,行进光合作用,汲取光能的树杆,变得坚硬、粗大、油光水滑,体会着自我的强大,沐浴着生命的恩赐。秋天来时,席地而起的秋风,吹来了秋高气爽,也开始向生命发出挑战的进军号角,飘落在树根下的片片叶子,有的向人发出“花开堪折直须折,莫待无花空折枝”的喟叹,有的在悲吟“落花有意,秋风无情”!为什么会令肥厚、宽大的叶子们有如此凄惨的感叹,而松树针、仙人球们却依然风吹雨打无惊无虑呢!同样是经过阳光的曝晒,同样经过光合作用,为什么有的因害怕而就飘落枝头,有的不畏不惧而依然笑傲冰霜寒雪!
因为时间?不是的,同样的一日二十四小时,同样的一个夏季三个月,同样的有光,同样遭遇雷雨,就如同我们人类,同样的教室,同样的平等走上考堂,同样的为民服务,有的怕考试,有的却一举成名,有的被百姓记住,有的被百姓唾骂!
送走冬天,迎来春天,原来时间还有周期性,年复一年,月复一月,日复一日。人生也是在生了死,死了生,一代接着一代,周如复始,可是,就在同样的生命周期里,岁月刻在每个生命个体脸上、百年过后石碑上痕迹的深浅、多少并不相同。
奶奶说,我门口的那块所谓镇宅之石,几十年前和几十年后的今天完全不同,那时的石块很大,且周身长角长刺,如今石头像一块硕大的圆宝,光滑可爱,那时孩子们不敢随便上去,如今大人小孩都可有事无事踩上去,奶奶怕我人长大了,也变成门口这块石头,临终前叮嘱我,千万不要做石头第二,说那是人生的悲哀,也丢祖宗的脸。
啊,时间又是从刀锋上走过来,从圆滑可爱中走过去。长得尖尖的石头是生命的开始,怪不得先人们说:初生牛犊不怕虎。圆滑的,过于世故的,饱经苍霜,三分话只说一分,不好说成好,该表态的打哈哈,先人们又说这是:老奸巨滑。
真不知是谁发现了时间这个伟大的概念,让人类从古至今发出诸如吃饭时从碗里走过,睡觉时从床头走过,说话时从口中走过的无比感叹来,所以我并不在乎占有时间的多寡,只想做个有鳞有角,而不是人云亦云的尸位素餐,行尸走肉。
当然,时间的富裕户们永远是属于春天的使者,有人说春天是一年的青春,青春是生命的春天。年轻人无论如何穷苦,都不会苦的。因为他有了健康,有了矫健的步伐,有了明亮的眼睛,有了热烘烘流着的血液,有了乌黑的头发,有了鲜润的腮帮,有了绯红的嘴唇,有了雪白的牙齿,有了纯净的气息,这一切足已能让年老的帝王羡慕不已。时间富裕,也同我们经济宽裕,钱多了是用来扩大再生产呢,还是用来过上纸醉金迷的生活,答案从人口中喊出的和行为上做到的,能否就能统一,不好说啊!
而那些在时间上感到捉襟见肘的贫困户,他们躲在无人的书上、家室的小旮旯里,发出了:韶光不再?我们可有过自己的时光?我们徒劳地召唤,这时光已消失?我哭泣时,枝条在和轻风嬉戏摇晃,我的屋子望着我,对我却不再认识。
是啊,人是怕老的。孩子的穷困能引起一个做母亲妇女的同情,青年人的穷困能引起一个少女的同情,可是人老了,能引起谁的同情,所以,老年人的穷困是一切穷困中最冷酷无情的穷困!难怪老人们说干旱天无露水,老来无人情。
但人都是要老的,要不虚度岁月,就要让恩爱的时光使我们锦绣生活闪闪发光。
恩爱的时光!是生命的给予,是社会精神的、物质的硕果,那个体生命就只顾索取吗?不,人生一世草木一秋,不能啊。
绿叶在激人成长;水波在滚滚东流,时光在离去,我们就不要去追求时间的来与去吧,好好把握现在,让我们都和时间水乳交融,和大自然万物水乳交融,和我们的本职工作水乳交融,和我们的家庭、同事、环境水乳交融??
第二篇:关于Verilog的几点感悟
关于Verilog的几点感悟
使用Verilog和VHDL的情况
美国:Verilog: 60%, VHDL: 40%
台湾:Verilog: 50%, VHDL: 50%
虽然Verilog的某些语法与C语言接近,但存在本质上的区别。
Verilog是一种硬件语言,最终是为了产生实际的硬件电路或对硬件电路进行仿真; C语言是一种软件语言,是控制硬件来实现某些功能;
利用Verilog编程时,要时刻记得Verilog是硬件语言,要时刻将Verilog与硬件电路对应起来;
SystemC and SystemVerilog:面向SOC。
五种模型类型
系统级
算法级
RTL级(寄存器传输级)
门级
开关级
时延定义
例1:not #3 N1(QN, Q);
三种延时都为3
例2:nand #(4,5) (Out, In1, In2);
上升时延为4,下降时延为5,转换到x的时延为两者的最小值4 例3:notif1 #(2,8,6) (Dout,Din,Ctrl);
上升时延为2,下降时延为8,截止时延为6,转换到x的时延为三者的最小值2
default语句
default语句建议使用,否则在综合时可能会引入不想要的Latch。
Task
task的语法:input和output可以不加在task的括号里,task只定义名字,input在task内部加,用分号结束定义(或者在task的括号内定义输入输出,用逗号结束定义)。调用没有参数的task时不需要加括号,加括号会报错。
Function
Function有且只有一个输出,但是,可以通过bit拼凑的方法得到“多个”想要的输出。Function可以有多个输入。
Function一般就来描述组合逻辑,用function来实现的组合逻辑,用module同样可以实现,只是描述得稍微麻烦一些,不如function简洁。
Function的名字就是输出,需要在function中进行赋值,输出需要在定义函数名字的时候定义位宽,默认是线。如果要写在always里面,可以定义寄存器。但本质都是组合逻辑。
如果要用fuction实现时序逻辑,不如直接写成module。
Function必须写在module中。
Function中的局部变量如果没有定义并且它所属模块有一个同名变量,则默认是引用function所属模块的变量,不需要在input中添加这个变量而可以直接使用;如果function中重新定义的局部变量跟function所属模块的某个变量重名了,那么默认是function内部的变量,与模块变量无关。
综合(Synthesize)
综合:将系统行为级描述映射到逻辑或电路描述。
综合的实现方法:根据综合算法,利用综合库中的库单元模块,将Verilog描述映射为同样功能的逻辑或电路。
可综合与不可综合:综合库单元以及综合工具可以实现的Verilog语句或风格称为“可综合”,不可实现的称为“不可综合”。
RTL (Register Transfer Level)
寄存器传输级:对系统的结构描述,由时序单元和组合单元,即:Register+Logic组成。
不可综合的Verilog语言
延时
综合库中,没有延时单元。
例: assign #5 A = B;
双沿触发的寄存器
目前的综合库中,没有双沿触发的寄存器,但在将来会加入此种寄存器: 例:always@(posedge clk or negedge clk)不可综合,
而alwyas@(posedge clk1 or negedge clk2)则是可综合的。
always敏感列表中既有沿触发又有电平触发
例: always@(posedge clk or reset)
应为:always@(posedge clk or posedge reset)
Initial 语句
Initial 语句用于testbench文件中,综合针对模块文件,不对testbench文件进行综合
if…else语句
if 后没有else,可能会引入latch。
例:always@(Ena or D)
if(Ena) Q <= D;
当Ena=0时,综合工具会认为Q值需要保持,从而引入了设计者不想要的锁存器。
修改后的代码:
always@(Ena or D)
if(Ena) Q <= D;
else Q<= 0;
case语句
在case语句缺少default的情况下,也可能会引入latch。
例:always@(Sel[1:0] a or b)
case(Sel[1:0])
'b00: q<=a;
'b01: q<=b;
default: q<='b0;
endcase
姑且不论casex和casez的作用(这两个语句的应用一定要小心,要注意是否可综合),case语句和if-else嵌套描述结构就有很大的区别。在verilog语法中,if-else-if-else语句是有优先级的,一般来说第一个if的优先级最高,最后一个else的优先级最低。如果描述一个编码器,在Xilinx的XST综合参数就有一个关于优先级编码器硬件原语的选项Priority Encoder Extraction。而case语句是“平行”结构,所有的case的条件和执行都没有“优先级”。而建立优先级结构(优先级树)会消耗大量的组合逻辑,所以如果能够使用case的地方,尽量用case替换if-else结构。
关于这点的引申有两点:第一,也可以用if…; if…; 的结构描述出不带优先级的“平行”条件判断语句。第二,随着现在综合工具的优化能力越来越强,大多数情况下可以将不必要的优先级树优化掉。
for语句
对for语句,综合工具先要将其展开,再去考虑
例: for(i=1;i<=4;i=i+1) Q [i] = D[i];
完全等价于 Q [1] = D[1];
Q [2] = D[2];
Q [3] = D[3];
Q [4] = D[4];
何时引入寄存器
定义为Reg类型的变量,综合后不一定引入寄存器。 例: always@(Ena or D)
if(Ena) Q <= D;
else Q<= 0;
只有在沿触发的always语句会引入寄存器 例: always@(posedge Clk)
Q<=D;