Verilog作為一門硬件描述語言,快速掌握它的方法就是不斷的練習,反復動手實踐,通過例子掌握隱藏在語句背后的硬件電路。下面是第一個需要學習的Verilog例子:
module adderN #(parameter N=4)( input[N-1:0] a, input[N-1:0] b, input cin, output cout, output[N-1] sum ); assign{cout,sum)=a+b+cin; endmodule
1、該例子描述了一個4位加法器,從例子可以看出整個模塊是以module開始,endmodule結束。每一個module都是一個完整的電路描述,其余都只能認為是電路片段。一個模塊就是一個完整的電路,如果有N個模塊,這N個模塊將通過某種機制結合起來,組成一個大的電路,但這N個模塊都是獨立運行的,而且是並行執行的。
2、a,b前面有一個[N-1:0],這個表示a與b的位寬為N,最高位為第N-1位,最低位為0位,而cin沒有位寬設定,則表示1位,對於任何有意義的邏輯變量(wire/reg,輸入輸出端口等),必須指定其位寬,如果沒有顯示的指定,位寬默認位1.
3、parameter類型用來定義全局符號常量,等效於C語言的參數設定。還有一個符號常量localparam,它和parameter的區別在於,parameter可以被外部調用模塊改變,而localparam僅在本模塊內部有效。
4、assign語句是連續賦值的意思。加法器是一個組合電路,當輸入變化時,輸出立即響應,而且這個過程是持續不斷的。
5、對於{cout,sum}的理解:這是一種對兩個變量合並賦值的簡化描述,HDL語法解析器和綜合器按照下面的理解對上述描述進行解析,並生成電路:
wire[N:0] adder_temp; //假設assgin {cout,sum}=adder_temp[N:0]; assign cout=adder_temp[N]; assign sum[N-1:0]=adder_temp[N-1:0];