/* written by Tomonori Izumi at Feb. 2007 */ /* 理解もせずにやみくもに書きうつすのでは勉強になりません。 理解せずに書き写すような時間の無駄をするくらいなら こんな課題はやめてしまって他の勉強をしましょう。 逆に、理解の助けのためであればナンボ見ても構いませんし、 結果としてほぼ同じソースコードになってしまったとしても全く構いません。 いずみ */ /* 三角波の値を出力する。点数256点。 */ module triangle256_module(ck,xrst,i,validi,value,valido); input ck; /* クロック */ input xrst; /* リセット(負論理) */ input [7:0] i; /* 角度(0..2PI を 0..256 で正規化) */ input validi; /* 入力値の有効/無効 */ output [7:0] value; /* 二の補数 1bit符号+7bit, -127..+127 */ output valido; /* 出力値の有効/無効 */ /* 0〜63 のとき 0〜+126 の右上がりライン 64〜127 のとき +127〜1 の右下がりライン 128〜191 のとき 0〜-126 の右下がりライン 192〜255 のとき -127〜-1 の右上がりライン */ function [7:0] triangle; input [7:0] i; begin case (i[7:6]) 2'b00: triangle = 8'b00000000+{1'b0,i[5:0],1'b0}; 2'b01: triangle = 8'b01111111-{1'b0,i[5:0],1'b0}; 2'b10: triangle = 8'b00000000-{1'b0,i[5:0],1'b0}; 2'b11: triangle = 8'b10000001+{1'b0,i[5:0],1'b0}; endcase // case(i[7:6]) end endfunction // triangle assign valido = validi; assign value = triangle(i); endmodule // triangle256_module