组合逻辑电路的设计

  在阎石老师的数字电子技术书中对组合逻辑电路的特点定义给出是“在组合逻辑电路中,任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。”就是说在组合逻辑电路中输出与电路的历史状况没有关系,电路中不包括存储单元。表达组合逻辑的方法有三:真值表、逻辑表达式和电路原理图。在verilogHDL描述组合逻辑电路中,与真值表对应的是用户自定义原语;而与电路原理图相对应的是门级建模,有个绰号又叫结构化描述;与逻辑表达式相对应的则称为行为描述。另外verilogHDL还可以用更抽象的描述方法描述组合逻辑电路。
这样看起来,不少还没有接触verilogHDL的人可能会大呼上当:这些小把戏也值得费时间研究?尤其在这个迅速发展的年头,哪有闲功夫学习什么逻辑语言描述呀!我会用EDA试验课上教授的原理图的绘画不就够了吗?
其实不然,从会用图形表达意思到用各种抽象的文字表达意思,人类的文明由此建立。语言抽象的威力可见一斑。试想,你1个3-8译码器你可以用图画,10个也没问题,但是后面加个万呢?事实上经过这些年的发展,verilogHDL等针对硬件描述语言小到密码锁,大到CPU(其实也是小,就是多而已)都可以拿来设计。
好了,看到这里你可能雄心勃勃想设计CPU了。高楼平地起,那我们就言归正传,开始进入硬件语言设计的世界吧。
在verilogHDL描述逻辑电路中有三种表达方式:assign、always和门原语。
所谓assign描述其实没什么难的,不过是用逻辑表达式和算术表达式描述输出信号与输入信号之间建立的某种直接的联系。
例如要求X1=a&b,你可以输入:
assign X1=a&b;
要求X2=a|b,你就敲:
assign X2=a|b;
非常简单,非常实用。
所谓always描述则可以在设计之中经常看见。首先,always在英语中的意思有三,即: invariably、forever、in any event。不少人可能以为always在verilogHDL中就是in any event的意思,没什么新的。其实不然。always在使用中必须加入事件的控制,当事件发生时,执行always指定的内容。需要注意的是,always另外一个特性是不论该事件已经发生多少次,只要事件发生就会执行相关的操作。其中最常见的两个事件是电平触发和边沿触发。
所谓电平触发是指当某个信号的电平发生变化时,执行指定内容;
例如:
always @(a or b)
out1=a+b;
指当a或b 的值发生变化时,out1等于a和b的算术和。
所谓边沿触发是指当某个信号的上升沿或者下降沿到来时,执行always指定的内容。
例如:
       always @(posedge clk1)
       out2=a&b;
       指当clk1的上升沿到来时,令out2等于a和b的逻辑与。
       always @(negedge clk2)
       out3=a|b;
       指当clk2的下降沿到来时,令out3等于a和b的逻辑或。
 

你可能感兴趣的:(存储,语言,图形)