2008年12月23日星期二

巴菲特警言

任何不能永远发展的事物,终将消亡。 
  If something can't go on forever, it will end.
(70%在纽约证交所的股票永远消失了,这也是中国的未来。这句话是他从物理学变通过来的, "不永远运动的,就会停止".价值投资每年的全美60人聚会,包括大家一起听爱因斯坦的相对论。因为价值投资相信,知识是不可以用专业分割的。中国的大学,最擅长培养会微积分的高分低能人士。这种人缺乏从A直接跳到Z的能力。缺乏从物理/数学/文学/艺术跳到股票的能力. 微软和IBM的第一轮面试,考你"北京有多少个百万富豪",就是为了消灭这些"什么都会,就是不会思考的人",这种人回答是"我不知道", 这种人也不会爱艺术。)

  1988年年报 时间是杰出企业的朋友,平庸企业的敌人。
(是的,有的股票现在在3000点呢,讨论上证是多么的无聊,甚至可以列入幼稚)

  1989年年报 当发现自己处在洞穴中时,你要做的第一件事就是停止挖掘。

  1990年年报 在错误的道路上,奔跑也没有用。
(插一句,奔跑也没有用,大喊大叫也没有用)

  1993年年报 可口可乐在1890年时整个公司大约值2000美元今天它的市值为500亿美元。如某个人在1890年时买该公司股票时,有人可能会对他说:"我们将会有两次世界大战,会有1907年的大崩盘。是不是最好等一等?"我们不能犯这个错误。

  1994年年会 几乎在任何领域,专业人员取得的成就明显地高于门外汉。但在金钱的管理上往往并非如此。
(呵呵, 你们天天看到失败的专业人士)

  1994年12月6日投资的基本思想是:把股票当作企业来看待,利用市场波动来取得优势,寻找安全的余地。这是本.格雷厄姆教导我们的……百年以后,这仍将是投资的基石.
( 是的,波动在BS模型里是风险,在价值投资却是优势。你能3折买赤湾,这难道会风险更大吗?)

  1994年12月6日如果你一生中找到三个杰出的企业,你就会变得非常富裕。
(同意, 继续努力中)

  1996年年会 1986年我的最大的成就就是没有做任何蠢事。诀窍是当没有合适的事情可做时,就什么也不做。
(对,永远呆在市场上是错的,空仓比止损境界高多了)

  广泛引用购买股票很简单。你要做的事情是按低于企业内在价值的价格购买一家企业的股票,如该企业管理层诚实可靠、有能力,那么你就永远持有这些股票。
(注意,他说的是永远)

  1990年8月6日 近年来,我的投资重点已经转移。我们不想以最便宜的价格买最糟糕的家具,我们要的是按合理的价格买最好的家具。
(好股就一个字:贵)

投资并非一个智商为160的人就一定能击败智商为130的人的游戏。
(看第一句的评论,中国从来就培养只会数学的白痴)

" 市场先生"是你的仆人,而不是你的向导。
(这是投机和投资的一个明显区别,投机的往往说自己"对市场有敬畏之心",而投资人士把Mr.Market"市场先生"当成神经质的家伙,被他引导,只会一起疯。所以,我们利用"市场先生", 我们无视噪音。)

在别人贪婪时恐惧,在别人恐惧时贪婪。
(反向就是价值的源泉,但是反向不代表你是价值投资)

从短期来看,股市是一个投票机;而从长期来看,股市是一个称重机。
(老师的话)

价格是你所付出的,价值是你所得到的。
(上大学的学费,是价格,大学教育是价值。价格和价值是不等的。

我宁要模糊的正确,也不要精确的错误。
(我以前很爱技术指标, 就是精确的错误.)

对于大多数投资者而言,重要的不是他知道什么,而是清醒地知道自己不知道什么。如果你不愿意拥有一家股票10年,那就不要考虑拥有它十分钟。
(买股票不是买个代码)

于每一笔投资,你都应当有勇气和信心将你净资产的10%以上投入。

2008年12月22日星期一

Linux下Opera中文输入问题及中文字体设置解决方案

1. iBus 与 Opera 9.62 浏览器 有 冲突,不能 在 Opera 浏览器里 调出 输入法 。。。
1.请用 Qt4 版本 Opera,或 Qt3 版本 Opera 
2.执行 sudo sed -i '2aexport QT_IM_MODULE=xim' /usr/bin/opera
以上方法 只能 在屏幕左下角 显示 输入框 ,不能 跟随光标 移动。(暂时的解决方案)

2. Linux下Opera字体设置
在Linux下使用Opera浏览中文页面时经常会发生字体混乱的问题。具体来说就是在一行中文中大部分都是宋体但是有时会蹦出来几个楷体字而且字号偏小显示模糊。
这一问题的产生和Opera的字体调用机制有关,解决起来也不难。Linux下Opera的字体配置文件是目录/usr/share/opera/ini下的font.ini文件,用VI编辑器打开该文件,找到“Know fonts that solves specific problems”项,修改包含“chinese-s good try-first”的条目如下family:WenQuanYi Bitmap Song=chinese-s good try-first,如果使用微软的SimSun字体(最好不要用,牵扯版权问题)相应的将WenQuanYi Bitmap Song替换为SimSun即可。 而后将上下的japanese和korean条目注释掉。完成上述修改后,重启Opera即可。

2008年12月16日星期二

【转帖】我的FPGA学习历程

原文出处:http://blog.ednchina.com/chactor/181287/message.aspx
FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,设计开发板,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。
  废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段:

①、Verilog语言的学习,熟悉Verilog语言的各种语法。
②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA板子。
③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII的基本结构,设计NiosII开发板,编写NiosII C语言程序,调试板子各模块功能。

先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,在本科时老师一般教VHDL,不过现在

Verilog用的人越来越多,其更容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。像systemC,systemVerilog之类的应该还在萌芽阶段,以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语言。
其实有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍:
①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。
②、《设计与验证Verilog HDL》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。
学习Verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。

Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。
刚开始我拿了实验室一块CPLD的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方法等,不过做到后面发现CPLD的资源不太够(没有内嵌的RAM、不能用SignalTapII,LE太少等),而实验室没有FPGA开发板,所以就萌生了自己做FPGA开发板的意图,刚好Cadence我也学的差不多了,就花了几天时间主要研究了FPGA配置电路的设计,在板子上做了Jtag和AS下载口,在做了几个用户按键和LED,其他的口全部引出作为IO口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。我选的FPGA是cycloneII系列的EP2C5,资源比以前的FPGA多了好几倍,还有PLL,内嵌的RAM,可以试试SignalTapII,用内嵌的逻辑分析仪测试引脚波形,对于FPGA的调试,逻辑分析仪是至关重要的。利用这块板子我完成了项目中的几个主要功能:RS232通信,指令译码,配置DDS,AD数据高速缓存,电子开关状态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好:
①、《Altera FPGA/CPLD 设计(基础篇)》:讲解一些基本的FPGA设计技术,以及QuartusII中各个工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),对于入门非常好。
②、《Altera FPGA/CPLD 设计(高级篇)》:讲解了一些高级工具的应用,LogicLock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。
③、《FPGA设计指南--器件,工具和流程》:这本书看了他的目录忍不住就买了,这本书讲述了FPGA设计的各个方面,虽然每个方面都是点到为止,但能让你有个整体的概念,了解FPGA的所有设计功能,了解FPGA开发的整个流程。
④、在这里也推荐几个学习FPGA比较好的论坛
http://www.edacn.net/bbs
http://www.eetop.cn/
⑤、其实最好的学习网站莫过于Altera的官方网站www.altera.com,不过很多人一看到英语就不想看,其实上面的英文很简单,很多时候不敢看是因为对自己没信心或心静不下来看。不过官方网站上资料很多,刚开始可能会觉得资料安排的有点乱,不方便查找,以后有时间我列个资料的链接目录,整理一下,方便大家查找。

到这里,自己最FPGA的学习有一段时间了,练习了很多实例,自己也编写了不少程序,也有了一些项目经验,算是对FPGA有些了解了。在不断的学习中发现FPGA不仅可以做逻辑设计,算法设计等,还能做嵌入式开发,altera先后开发了Nios,NiosII两款FPGA的嵌入式软核,并有配套的软件,刚开始看到这些我真是心中突然豁然开朗,学习真的是无止境,又一个全新的领域摆在我面前,我决定学习NiosII,要学就要学最好。
刚开始入门是很痛苦的,嵌入式设计需要从硬件到驱动到软件全部熟悉,硬件系统问题还不是很大(以前做过单片机,DSP等MCU),处理器的架构心里还有点数,对于驱动和软件工程,刚开始学习真的很头痛。NiosII应该还算比较新的内容(应该是2004年出的),国内的书籍不算很多,网上这方面的资料也比较零碎,所以我就开始将Altera网站上这方面的资料系统的看一边,这里推荐几本网站上的handbook:
①、Embedded Design Handbook
②、Nios II Processor Reference Handbook
③、Nios II Software Developer's Handbook
④、Quartus II Handbook, Volume 4: SOPC Builder
⑤、Quartus II Handbook, Volume 5: Embedded Peripherals
看完这些handbook,总算基本明白整个架构,软硬件设计方法,驱动的编写等,感觉自己可以编一些嵌入式的程序了,不过虽然前面做的那块ep2c5的板子支持NiosII系统,不过对于嵌入式设计来说还是显得单薄了一点,没有SDRAM,Flash这两个比较基本的模块,Ep2C5内嵌的RAM太小,程序写不大,而且每次总要绞尽脑汁优化程序代码大小,很多时候优化了后函数功能会受到限制,不利于初学者,也不利于调试。所以到这里我有产生了自己做一块Nios开发板的想法(直接买比较贵,自己做便宜,而且还能锻炼自己,一举两得),通过借鉴其他开发板,选择自己开发板上需要包含什么模块,确定各个模块使用什么芯片,阅读各个芯片的datasheet,画出原理图并做出PCB图,这块板子我选的是Ep2c8Q208,比上一块资源又将近多了一倍,板子上还有以下模块:SDRAM,Flash,EPCS4,RS232,USB,VGA,PS2,AD,DA,LCD等,满足了一般开发板的配置要求。板子回来以后调试了四五天,(flash工作了,LCD显示了,RS232通了,USB通了,AD,DA工作了,SDRAM正常了...),真是每天都有惊喜,每个模块都编写了NiosII软件测试程序,调试硬件的时候对软件的运行也更熟悉了。在这次调试的过程中真的学到了很多,为此专门写了好几页调试笔记,下次拿出来和大家一起分享。现在硬件平台有了,NiosII也了解的差不多了,终于可以自己编写一些规模大一点的程序了。
以后的路还很长,不过也有很多惊喜在等着我们......

2008年12月15日星期一

TI DSP/BIOS线程比较













硬件中断


软件中断


任务


触发


外部异步事件


SWI函数


TSK模块,动态调度抢占


优先级


最高




次高


主要特征


200Khz左右,应对硬件信号进行响应,时间要求苛刻,步骤简单,处理快速,非阻塞程序


100ms以上事件,除非被更高级别中断抢占,会一直执行至完毕


拥有多任务间通信和同步手段,一个任务可以挂起等待某一资源的有效


堆栈使用


使用系统栈


使用系统栈


每个任务具有自己大运行时栈,用于保存局部变量和调用嵌套函数


优点


响应快,应对关键任务


时间要求不苛刻,减少了中断禁止时间,中断函数相对独立


时间要求不苛刻,减少了中断禁止时间,中断函数要求复杂,更有效利用共享数据


其他注解


CLK函数,每个定时器中断末尾执行


PRD函数,定时器中断或其他事件多次计数后执行


拥有队列,信号灯,邮箱等机制用于任务间同步和通信

TI的DSP的动态加载

动态加载是TI CCS提高运行速度的比较有用的工具, 特别是在具有多个互斥功能实现(不同时运行)的时候, 以及从rom/flash中加载应用,以及启动的时候.
动态加载说到底就是预先进行了重新位, 里面所有的跳转和调用语句都是按照运行位置进行编译的, 而不是按照load位置. 这样, 我们可以将程序放在任何地方,甚至硬盘里面, 到时候需要的时候, 只要加载到固定的位置即可.因此, 可以建立一种类似于传统的OS. 只是有很多限制.
这一点和传统的操作系统有不同的地方就是: 传统的操作系统加载的文件一般都有重定位表, 在加载的时候,需要将这个重定位表中每一项所对应的位置地方的偏移量(一般都是绝对偏移)等按照当前实际位置进行修改;对于具有export 函数功能的文件, 可能需要建立一个表格, 甚至修改系统的函数入口地址映射表, 这样别的文件才能找到当前加载的函数.


动态加载有三种方法: 在CCS2.2之后,一般采用cmd文件中定义union和group的方法来建立各个动态加载项的run位置和load位置,以及各自大小. 这种方式需要我们采用DMA的方式进行手动将需要的程序段加载到运行区域. 而在ccs3.0里面,提出了一种更简洁的建立这个run和load位置的方法, 并且提供相应的传输函数. 这些都很类似.
有一点值得指出: 在函数中使用的时候, 必须定义成指针的形式, 否则将找不到定义的符号.

DM642的中断处理

1.非NMI中断的发生的前提:GIE=1,NMIE=1,IER中对应的标记位,还有就是DEVICE中的使能位
2.当非NMI中断的发生的时候,自动清楚GIE,保存到PGIE中,退出采用B IRP,会自动恢复GIE
3.中断的能够发生位置:Single Assignment vs. Multiple Assignment:只有在single assignment才能发生中断

另外:TI DSP的printf问题
1. printf可能会打破互斥的功能,导致互斥失败。

DSP中的EDMA

EDMA可以在没有DSP参与得情况下对数据进行搬移操作,这样可以让cpu专心做数据计算

1、EDMA得请求源
三个,EDMA Channel 64个通道,对应64个同步事件;
HPI,PCI,EMAC master port;
L2 Cache controller/QDMA;

2、EDMA 得请求过程
TR---->TC---->地址产生器;

3、优先级
在DM642中,EDMA可以设置4种优先级,在EDMA传输控制器里面有四个优先级队列对应着这4个优先级,Q0~Q3,优先级依次递减,队列最长放16个申请,每个申请源对应得长度可以配置.但是任何一个队列的满,将会导致整个EDMA的提交处于STALL状态。从EDMA的队列来看,任何时候,总是优先服务高优先级的队列中请求,但是另外一方面,每一个队列中的传输请求(TR)总是串行服务的,因此,如果想两个EDMA交错进行,必须保证它们位于不同的队列之中,或者采用ATCC来进行触发。
有HPI的EDMA传输请求(burst最长为8个WORD),有L2和QDMA的请求(QDMA是通过L1D的write buffer 提交的,因此,不小心控制,可能会导致整个CPU 处于STALL状态),还有就是EDMA控制器提交的:在复杂系统中,例如有AUDIO,VIDEO,HPI,video decoder,以及QDMA,因此,从理论上看,最好的设置是L2的提交为urgent,而audio 设置为high,HPI设置为medium(缺省),video decoder/QDMA设置为low,那么视频必须设置为high或者urgent ,否则视频显示将出现莫明的小块,甚至横条。这种原因有多方面:例如将代码放在片外,HPI的请求导致的EDMA传输请求。如果将VIDEO设置低于HIGH,将导致video得不到service,而出现underflow的问题。
4、挂起
当任何一个EDMA申请源得搬移请求对应得队列满得时候该申请源的所有请求都被挂起,直到那个导致挂起的请求进入队列;

5、系统的EDMA优先级分配
四个队列是并行工作的,所以要合理分配优先级提高吞吐率----优先级的合理分配;
尽量将大数据量的搬移分配为低优先级,数据量少而实时要求高的放高优先级;
将大数据量的搬移拆分成几个小数据量的搬移;

6、EDMA的使用
打开--配置--事件触发