寫在前面的話
位拼運算符是將多個小的表達式合並形成一個大的表達式,用符號{}來實現多個表達式的連接運算,各個表達式之間用“,”隔開。位拼運算符是夢翼師兄特別喜歡的一種運算符,它聰慧靈秀,不但可以進行簡單的數據拼接,更是可以用來執行移位操作,而且數據永遠是循環的,不會丟失,用途非常廣泛。
代碼實例
/**************************************************** * Engineer : 夢翼師兄 * QQ : 761664056 * The module function:位拼接運算符模塊 *****************************************************/ 01 module shift(clk,rst_n,led_out); 02 input clk;//系統輸入 03 input rst_n;//系統復位 04 05 output reg [3:0]led_out;//led驅動端口 06 07 always@(posedge clk or negedge rst_n) 08 begin 09 if(!rst_n) 10 begin 11 led_out<=4'b0111;//讓其中一盞燈點亮 12 end 13 else 14 begin 15 led_out<={led_out[0],led_out[3:1]};//實現流水燈 16 end 17 end 18 endmodule |
編寫測試代碼如下
/**************************************************** * Engineer : 夢翼師兄 * QQ : 761664056 * The module function:位拼接運算符測試模塊 *****************************************************/ 01 `timescale 1ns/1ps 02 module tb; 03 reg clk; 04 reg rst_n; 05 06 wire [3:0]led_out; 07 08 initial 09 begin 10 clk=0; 11 rst_n=0; 12 # 1000.1 rst_n=1; 13 end 14 15 always #10 clk=~clk; 16 17 shift shift( 18 .clk(clk), 19 .rst_n(rst_n), 20 .led_out(led_out) 21 ); 22 endmodule |
查看仿真波形如下:
從仿真圖可以看出,每個時鍾周期,0都會向右移動一位。到最右邊時就會放返回最左邊繼續循環,使用拼位的運算符,在很多場合-如串並轉換等,會使代碼編寫變得簡單。
代碼的意思是,每次把最低位放到最高位,讓前三位放到后面,這樣邏輯就實現了移位,形成了循環。