皆さんに宿題を手伝ってもらいたくてリポジトリを作りました。PRくれる優しい人がいると泣いて喜びます・・・
MacでGHDLを使って開発してます。
GHDL on OS X
GHDL
10ビットの正数 : 変域 1~1023 について, 偶数なら2で割る 奇数なら3倍して+1する を繰り返していると, 数字が大小を繰り返しそのうち1になります. これを Collatz 山脈と呼ぶことにします. Collats 山脈の最高峰を与える登り口 (=奇数) のうち 最も行程の長いスタート地点の数字をルートの名前とします. 例えば 7, 8, 9, 10, 11 からスタートした場合 最高峰は52になりますが行程の一番長い9をルート名とします. 最高峰が高い順に上位4本のルート名とその行程の長さを計算する回路を設計してください.
与えられた数でCollatz山脈を上り下りした時の
- 最高峰
- ルートの長さ
を出力するCollatz
を実装しました。collatz_tb.vhd
を走らせると、1~1023で走らせた結果をレポートします。
Collatzから出力された結果を並べ替えて保存するsorter
,二つを組み合わせて答えをだすwhole
を実装しました。ほぼ先輩のやつの丸写しです・・・
testbench.vhd
を走らせると答えがみられます
プライオリティエンコーダとバレルシフタを使って、1クロックでできる限り何回も2で割る実装をしました。奇数の場合は、3でかけて1を足してから同様の処理を同一クロック内で行なっています。
RAMを実装しました。すでに登ったことのある上り口に到達した場合はramを使って残りをスキップします。