仁木/春のプロジェクト2009/第6回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[仁木/春のプロジェクト2009]]
*第6回 スタックの設計 [#p07757a8]
**1 式の表し方 [#w18e1a7b]
-中置記法とは?
数学やC言語で幅広く使われている式の表記法。2項演算子は2つの数字の間に書かれる。CPUではこの表記を直接計算するのは困難。
--ex.1+2*4-3
-後置記法とは?
2つの数字の後ろに2項演算子が書かれる。この表記は日本語で正しく読むことができるので日本語記法とも呼ばれる。
--ex.124*+3- //1と2かける4したものをたし、3でひく
--ex.12+43-* //1と2をたしたものと4から3を引いたものをかける。
**2 スタックの設計 [#vc0ddf84]
-スタックとは?
抽象的データ構造のこと。後置記法で書かれた式を簡単に計算できる。
--プッシュとは?
データを追加すること。スタックではプッシュを行うとトップにデータが追加される。
--ポップとは?
データを取り出すこと。
#ref(pro1.jpg)
-16ビットの4つのレジスタでスタックを構成する
#ref(pro2.jpg)
--入力は?
16bitのd
--出力は?
16bitのqtop、qnext //キューのトップと2番目
-動作を確認する
--reset
非同期reset。非同期でq[0]に0を代入してリセットする。
--load
1の時にq[0]は入力ポートdの値をラッチ。
--push
1のとき全てのデータが1つ下に移動する。
--pop
1のときデータが1つ上にポップされる。
--load&push
両方1のときは全データが1つ下に下がってから空いたスタックトップにd値がラッチされる。
**3 スタックのverilog記述 [#e63ce2b8]
-各always文の動作を確認する
--1個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタックトップに0が代入される(リセット)
---Loadが1のときはトップにd値が代入される。
---POPが1の時にはスタック2番目の値がトップに代入される。
--2個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタック2番目に0が代入される(リセット)
---pushが1のときはスタック2番目にトップが代入される。
---POPが1の時にはスタック3番目の値が2番目に代入される。
--3個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタック3番目に0が代入される(リセット)
---pushが1のときはスタック3番目に2番目が代入される。
---POPが1の時にはスタック4番目の値が3番目に代入される。
--4個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタック4番目に0が代入される(リセット)
---pushが1のときはスタック4番目に3番目が代入される。
-拡張するには?
parameter文でレジスタの数Nを指定。これでこのモジュールをインスタンス化するときにNの値を指定することによりレジスタ値を変更できる。
--Nビットとしたとき、どう記述するか確認
---for文
最初と最後のalways以外構文が同じためそれぞれq[i]と表記してfor文をまわせる。
ex. for(i=1;i<N-1;i=i+1) //{}はいらない。尚、iをあらかじめ integer i;として宣言しておく必要がある。このfor文の場合、i=1(スタック2番目)からN-1(スタック最後から2番目)までまわす。
**4 演算スタックの設計 [#j9f28fdb]
-演算スタックの入力、出力は?
--入力
clk,reset,num,op,x //xのみ16ビットで他は1ビット
-以上を踏まえHDLで記述する
#ref(無題.jpg)
-各行について見ていく
--9
ALUのインスタンス化。a,bにはスタックのトップと2番目を接続、f(+や-の演算決定)は入力xの下位5BITで決定。演算結果の出力sは信号線ALUOUTに接続。
--10
stackのインスタンス化。load等には同名の信号線が繋がれ、レジスタ型変数stackinはスタックの入力であるdにつながれる。
--12.13.14
#ref(無題2.jpg)
上記の表どおりに条件式を書く。14はx[4]の値で単項か2項か選択する。?は真偽の演算子。
--16
num,op,x,aluoutのいずれかの値が変わったとき、以下の文を実行
--17
numが1のときstackinにxを代入。
--18
opが1のときstackinにaluoutを代入。
numが1のときはスタック追加なのでスタックのd接続信号線stackinに入力値xが繋がれる。
opが1のときは演算なので、以前の結果であるALUOUTをstackinに繋いでやる。
--19
num,opがともに0の時は何を代入してもよい。この分により、いずれにせよ代入されることになるのでラッチ自動作成を避けることができる。
**5 シミュレーション [#abb446b2]
検査済み。問題なし
終了行:
[[仁木/春のプロジェクト2009]]
*第6回 スタックの設計 [#p07757a8]
**1 式の表し方 [#w18e1a7b]
-中置記法とは?
数学やC言語で幅広く使われている式の表記法。2項演算子は2つの数字の間に書かれる。CPUではこの表記を直接計算するのは困難。
--ex.1+2*4-3
-後置記法とは?
2つの数字の後ろに2項演算子が書かれる。この表記は日本語で正しく読むことができるので日本語記法とも呼ばれる。
--ex.124*+3- //1と2かける4したものをたし、3でひく
--ex.12+43-* //1と2をたしたものと4から3を引いたものをかける。
**2 スタックの設計 [#vc0ddf84]
-スタックとは?
抽象的データ構造のこと。後置記法で書かれた式を簡単に計算できる。
--プッシュとは?
データを追加すること。スタックではプッシュを行うとトップにデータが追加される。
--ポップとは?
データを取り出すこと。
#ref(pro1.jpg)
-16ビットの4つのレジスタでスタックを構成する
#ref(pro2.jpg)
--入力は?
16bitのd
--出力は?
16bitのqtop、qnext //キューのトップと2番目
-動作を確認する
--reset
非同期reset。非同期でq[0]に0を代入してリセットする。
--load
1の時にq[0]は入力ポートdの値をラッチ。
--push
1のとき全てのデータが1つ下に移動する。
--pop
1のときデータが1つ上にポップされる。
--load&push
両方1のときは全データが1つ下に下がってから空いたスタックトップにd値がラッチされる。
**3 スタックのverilog記述 [#e63ce2b8]
-各always文の動作を確認する
--1個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタックトップに0が代入される(リセット)
---Loadが1のときはトップにd値が代入される。
---POPが1の時にはスタック2番目の値がトップに代入される。
--2個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタック2番目に0が代入される(リセット)
---pushが1のときはスタック2番目にトップが代入される。
---POPが1の時にはスタック3番目の値が2番目に代入される。
--3個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタック3番目に0が代入される(リセット)
---pushが1のときはスタック3番目に2番目が代入される。
---POPが1の時にはスタック4番目の値が3番目に代入される。
--4個目
---CLKが立ち上がり又はRESETが立ち下がったとき以下の文が実行。
---リセットが0のときはスタック4番目に0が代入される(リセット)
---pushが1のときはスタック4番目に3番目が代入される。
-拡張するには?
parameter文でレジスタの数Nを指定。これでこのモジュールをインスタンス化するときにNの値を指定することによりレジスタ値を変更できる。
--Nビットとしたとき、どう記述するか確認
---for文
最初と最後のalways以外構文が同じためそれぞれq[i]と表記してfor文をまわせる。
ex. for(i=1;i<N-1;i=i+1) //{}はいらない。尚、iをあらかじめ integer i;として宣言しておく必要がある。このfor文の場合、i=1(スタック2番目)からN-1(スタック最後から2番目)までまわす。
**4 演算スタックの設計 [#j9f28fdb]
-演算スタックの入力、出力は?
--入力
clk,reset,num,op,x //xのみ16ビットで他は1ビット
-以上を踏まえHDLで記述する
#ref(無題.jpg)
-各行について見ていく
--9
ALUのインスタンス化。a,bにはスタックのトップと2番目を接続、f(+や-の演算決定)は入力xの下位5BITで決定。演算結果の出力sは信号線ALUOUTに接続。
--10
stackのインスタンス化。load等には同名の信号線が繋がれ、レジスタ型変数stackinはスタックの入力であるdにつながれる。
--12.13.14
#ref(無題2.jpg)
上記の表どおりに条件式を書く。14はx[4]の値で単項か2項か選択する。?は真偽の演算子。
--16
num,op,x,aluoutのいずれかの値が変わったとき、以下の文を実行
--17
numが1のときstackinにxを代入。
--18
opが1のときstackinにaluoutを代入。
numが1のときはスタック追加なのでスタックのd接続信号線stackinに入力値xが繋がれる。
opが1のときは演算なので、以前の結果であるALUOUTをstackinに繋いでやる。
--19
num,opがともに0の時は何を代入してもよい。この分により、いずれにせよ代入されることになるのでラッチ自動作成を避けることができる。
**5 シミュレーション [#abb446b2]
検査済み。問題なし
ページ名: