fpga開發過程中是免不了要用到移位暫存器的,傳統的移位暫存器是通過暫存器(或者叫觸發器)實現的,占用的是fpga內部的邏輯資源,當要移位的次數過多時,自然會耗費更多資源。但是如果用lut(look up table)查詢表實現的話就很輕鬆了,lut是通過提前儲存下一張真值表來實現邏輯運算的,所以非常節省邏輯資源。常用的移位暫存器srl種類很多,這裡以16bit的srl16e為例,說一說怎麼使用它。
srl16e的例化原語如下,輸入是時鐘clk,使能ce,d,和四位輸出位選擇控制位址a3a2a1a0,輸出是q。首先要給出乙個16bit的初始值,後面的移位就是按照時鐘節拍對初始進行操作的,以**為例,輸入是d(0),意味著這16個週期內每個週期給序列最右邊增加乙個0,相應的每個週期對應的序列最左邊的值也會被擠走。第0次移位得到0000000000001111,第二位是1,輸出q就是1,第一次移位得到0000000000011110,第二位是1,輸出q就是1,第二次移位得到0000000000111100,第二位是0,輸出q就是0,以此類推,輸出依次是1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,輸出第幾位由a3a2a1a0做位址控制(第二位輸出對應0001),modelsim**示意圖如下:
.q(rst), // srl data output輸出16'h000f第[a3:a0]位的值,總共輸出16次(使用的是srl16e),d(0)從右(最低位)進,16'h000f的第2位輸出
.a0(1'b1), // select[0] input
.a1(1'b0), // select[1] input
.a2(1'b0), // select[2] input
.a3(1'b0), // select[3] input
.ce(1'b1), // clock enable input
.clk(clk), // clock input
.d(0) // srl data input
);endmodule
Verilog中的函式
verilog中的函式 verilog hdl與大多數可程式語言一樣,將使用率很高的 按照軟體工程的思想,寫成函式,這樣,該函式可以被多次呼叫。verilog中函式常用語三種情況 verilog中的函式與c語言中的函式的主要不同之處是 在verilog中,呼叫函式時,需要將乙個或則多個自變數傳給函式...
verilog中的task用法
定義乙個任務。task task demo 任務定義結構開頭,命名為 task demo input 7 0 x,y 輸入埠說明 output 7 0 tmp 輸出埠說明 if x y 給出任務定義的描述語句 tmp x else tmp y endtask 上述 定義了乙個名為 task demo...
Verilog中generate的用法
一 generate verilog 2001新增了generate迴圈,允許產生module和primitive的多個例項化,同時也可以產生多個variable,net,task,function,continous assignment,initial和always。在generate語句中可以...