The First Day——暨三人表决器的VHDL实现

    很遗憾,大三了,才有机会写自己的第一篇所谓技术博客,对于csdn也是慕名已久。身边的很多大牛都随时记录技术小发现,公之到博客,自己觉得这样的形式,是对于技术的热爱和探讨,随手记录从而得到更多的发现,对于技术的长进和提高也是一个极好的手段。     

    这三年来学过很多东西,其实发现过很多值得纪念和书写的技术发现,却都被自己忽略而为有所记录。大学也过了快三年,看到自己日益枯竭的创造力,徘徊在保研还是考研抉择的苦逼中,却又想提高技术,学很多新奇的东西,却又想去花比其他人多的功夫去钻研考研的东西,真实xx(此处为脏字,请勿效仿)纠结。     

    上述话自然是玩笑了,想来已进入大三,对于编程的世界,从起初的懵懂纠结,到后来的渐入佳境,逐渐的对于自己IT人的认同和自嘲。也发现自己逐渐喜欢上了这个苦逼却又有趣的行业,我是个程序猿。     

    当然,不想做项目经理的程序猿不是一个好架构师,不想做一个可依据决策的管理层的架构师不是一个好分析师。     

    废话很多,这两年学了很多东西,C/C++、Java、C#、PHP、Python、MATLAB,均有所涉猎,后三者为自学,也未曾有大规模项目,不知是否有所成就,MATLAB自然是为了美赛所学,你懂的。前几者不管是实验、项目都做的很多,尤其是C,自己比较有研究,毕竟选了嵌入式方向,自然也是要稍微倾向一些,当然还是有一些其他原因的。而对于底层操作系统,特别是Linux的喜爱(尽管操作系统考得那是一个惨啊…),使自己对于OS和开源的语言和脚本语言很有兴趣和感觉,这些在以后的博客中都会有所写到。     

    写第一篇博客总是很激动,所以废话就多了一点,反正就这样吧,希望自己可以一点一点的积累。     

    第一篇就以最近新开的嵌入式系统中PLD变成开始吧,可编程逻辑器件PLD(programmable logic device) ,硬件的软件化思想,学了一些VHDL的东西,突出感觉作为软件学院的学生,对于硬件的理解差了不是一点半点啊,先前的数字逻辑和计算机组成原理,完全是“书呆子”,实际操作起来,尼玛各种蛋疼,不是这个地线没接,就是那块芯片插反了。很内疚的是大一下学期做计组实验,莫名其妙的弄坏了三块相同的芯片(具体名称记不起来了),一插上芯片就发烫,吼来老师弄了半天,自己还直呼这芯片肯定有问题,一副无辜样,最后是自己高低电平接反了…这…还好芯片不贵,老师也就息事宁人了…哎…人太笨啊。    

    所以,这次可以当做接触硬件的好机会了。第一次实验是简单的三人表决器,自己一拿到题目习惯性的数字逻辑思维,一顿乱分析,先写出了真值表,然后各种表达式化简,电路图设计。弄得如火如荼时,旁边大牛说,hey,哥们儿,这…直接一句话就搞定了吧,我们用的是VHDL,类似于软件编程哎。……啊,酱紫啊,果然是人太笨啊…好吧,不多说了,先把简单的几行代码copy进来:         
     

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY test IS
            PORT(SW1,SW2,SW3:IN std_logic;
                          L:OUT std_logic);
            END test;
ARCHITECTURE ranyu OF test IS
signal data:std_logic_vector(2 DOWNTO 0);
BEGIN
            data <=SW1&SW2&SW3;
            process(data)
            begin
            if(data ="110" or data = "101" or data = "011" or data ="111") then
            L <='1';
            else
                        L<= '0';
            end if;
            endprocess;
END ranyu;





    其实感觉自己弄得有点复杂啦,大牛们都是一句with...select...when就搞定了,看我这还用顺序语句,先呈上我的吧:
    前两行是标准写法,就不解释了,Entity中定义了SW1,SW2,SW3三个输入和L一个输出,ARCHITECTURE 中data是一个三位信号,process中if条件语句中自然是当三个输入信号有两者或以上为1时,输出为‘1’,表决通过了。其他就是不通过了。这里也可以用case...when...,效果类似。很简单的程序和逻辑吧,看看HDL语言,一天就会了,我就是这种速成品。 
再给出老师的比较简便的并行写法,一看水平就不一样啊:
   
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY test IS
PORT(SW:IN std_logic_vector(3 DOWNTO 1);
 L:OUT std_logic_vector(2 DOWNTO 1));
END test;
ARCHITECTURE ranyu OF test IS
BEGIN
with SW select
L <= "10" when "011",
    "10" when "101",
"10" when "110",
    "10" when "111",
"01" when others;
END ranyu;




   至于波形图很简单了,就上传1张,意思意思吧,看得懂就好~   
    
    
    第一篇就这样了,感觉不错,就是废话多了点,争取以后逐渐变成一个技术牛人,什么情感博客什么唧唧歪歪的就不多写了。希望一点点积累吧~加油了。
    
                          




你可能感兴趣的:(PLD编程(VHDL))