EDITORIAL言葉
ファイトオペレータビットは小さな式の複数のシンボルを大式を形成するためにマージされている分離された「」発現との間の各演算式が複数接続されている達成するために、{}。スリーパービット戦い演算子は、特に翼先輩オペレータ、それコングHuiling秀、だけではなく、単純なデータのステッチが、シフト操作を実行するために使用され、データが失われることはありません、常に円形であることができ、使用のようなものです非常に大規模な。
コード例
/ ************************************************* *** *エンジニア: ドリーム・ブラザーウイング * QQ:761664056 *モジュールの機能:ビット連結演算子モジュール ************************************************** *** / 01 モジュールの シフト( CLK 、 RST_N 、 led_out )。 02 入力 CLKを、 // システム入力 03 INPUTの RST_Nを; // リセット 04 05 出力 REG [ 3 : 0 ] led_out ; // LED 駆動ポート 06 07 常に(@ posedgeの CLK または negedgeの RST_N ) 08 始めます 09 もし(! RST_N ) 10 始めます 。Led_out 11 <= 4'b0111 ; // ランプのいずれかが点灯している作ります 12 終了 13 他 14 始めます 15 Led_out <= { led_out [ 0 ]、 led_outの[ 3 : 1 ];} // 達成水ライト 16 終了 17 終了 18 ENDMODULE |
次のようにテストコードを書きます
/ ************************************************* *** *エンジニア: ドリーム・ブラザーウイング * QQ:761664056 *モジュールの機能:ビット連結演算子テストモジュール ************************************************** *** / 01 `タイムスケール1nsの/ 1PS 02 モジュール 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都会向右移动一位。到最右边时就会放返回最左边继续循环,使用拼位的运算符,在很多场合-如串并转换等,会使代码编写变得简单。
代码的意思是,每次把最低位放到最高位,让前三位放到后面,这样逻辑就实现了移位,形成了循环。