週刊三軒茶屋 第9号 : タケイ

思考・指向・試行錯誤?(前編)

こんばんは。たけいです。今回は、専門的な話をします。かなりマニアックです。すいません。ぼくの仕事の多くは、

「あるユーザー要件に対して、それをLSIで実現させるにはどういう論理を組めば良いか」

を考えることです。

一昔前の設計では、以前紹介したANDとかORを組み合わせて設計するのでしょうが…(現在の規模のLSIではまず不可能です!!)

現在は、専用の設計用言語(Verilog-HDL VHDL)を使って設計します。この設計用言語はCの派生言語なので、C言語でユーザー要件がプログラムできれば設計の8割は終了です。これを「ビヘイビアレベルで実現した」と言います。ぼくはこのレベルが一番大切だと考えています。そして、一番楽しい作業でもあります。

次は、RTLレベル(レジスタ・トランスファ・レベル)。ここではシーケンシャルなC言語に時間の概念を盛り込みます。

最後が、ゲートレベル。ここでは配線遅延だのゲート遅延だのセットアップだのホールドだのを考えます。まあ、この2つのレベルについては、そのうちに…。

こんな業務をしているので、プログラミングの勘が鈍らないように、ちょい数学的なクイズを適当に見つけてはそれをC言語で求めるといった作業を暇を見つけてやっています。

もちろん最終的に「できない!!やめっ!!」で終わることもあります(笑)。例えば、次のような問題。元は有名な問題らしいです。出典は知りませんが…

--------------------------------------------------------------



┌─┬─┬─┬─┬─┬─┬─┬─┐
|  |  |  |*|  |  |  |*|
├─┼─┼─┼─┼─┼─┼─┼─┤
|*|  |  |*|  |  |*|  |
├─┼─┼─┼─┼─┼─┼─┼─┤
|  |*|  |*|  |*|  |  |
├─┼─┼─┼─┼─┼─┼─┼─┤
|  |  |*|*|*|  |  |  |
├─┼─┼─┼─┼─┼─┼─┼─┤
|*|*|*|★|*|*|*|*
├─┼─┼─┼─┼─┼─┼─┼─┤
|  |  |*|*|*|  |  |  |
├─┼─┼─┼─┼─┼─┼─┼─┤
|  |*|  |*|  |*|  |  |
├─┼─┼─┼─┼─┼─┼─┼─┤
|*|  |  |*|  |  |*|  |
└─┴─┴─┴─┴─┴─┴─┴─┘
クイーンの動き ★がクイーンです。

チェス盤(8×8)があります。ここにクイーンを同士討ちが起こらないように配置する方法は何通りあるでしょうか?クイーンは、1つ以上で何個置いてもかまいません。
(ホントの問題は対称なものは除くらしいです。でも今回はその条件はなし!難しくなるからね)

--------------------------------------------------------------

例えば、1つ置く場合、同士討ちが起きる訳がないので、マス目の数(8×8=64)通りあります。

2つの場合は?
3つの場合は?

と考えてみてください。

…っが、9個以上は明らかに置けませんね。数学的には、「何で9個以上置けないのか」を証明しなければならないのでしょうが、まあ、それは良いでしょう(笑)

さて、これを求めましょう。

数学的に考えれば、机上の計算ですいすいと求められるのでしょうけど、めんどくさい(ってか分からない)ので力ワザで求めます。FOR文を駆使してブンブン回します。

「大切なのは結果であって、エレガントに解く必要はこれっぽっちも必要ありません。」

こんなこと言うと、先生に怒られますね。よく怒られました。(笑)でも、実務レベルでは関係ありません。

速く!!速く!!正確に!

です。これから、僕もプログラミング(試行錯誤)を始めます。回答は次回!!実現できたらね…(笑)。できなかったらそう書きます…(可能性大)答えが分からなかったら、「問題の出し逃げ」になりますが、怒らないで下さいね。

皆さんも考えてみてください。



週刊 さんちゃTOPページへ