Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PICを作ろう ,データセレクタ ~昼休みにまったり進めるプロジェクト (2)

今日は、ALUの右側入力に接続されているデータセレクタです。このデータセレクタは、演算系の命令で、オペランドをファイルレジスタからとるか、リテラル(イミディエイト)として、インストラクションの一部からとるかを選択するものです。記述は下記のように単純なものです。例によって、alwaysブロックの最初で、出力にx(Don't care)を代入して、必要に応じて、ファイルレジスタから(read_bus_i)か、インストラクションのLSB8ビット(instruction_i[7:0])からかを選択し、ALUの右側入力(bbus)に出力します。命令によっては(たとえばGOTO命令)ALUは使われないため、このような場合は、xを出力しています。
 あと、今回からmoduleのポート宣言は、いわゆるANSI C式に変えました(Verilog2000).

---
本日の御託
うちの家内が好きなカワイイ動物は
 -シロクマ(ホッキョククマ)
 -シマリス
 -ミナミコアリクイ(マニアックだな...笑)
もちろん、子猫とかも好きだけど・・・で、ベルリン動物園のホームページからシロクマの赤ちゃん、「クヌート」の動画をダウンロードしてきてあげたら喜んでいた。確かにかわいい。ベルリン動物園は株式会社で、クヌート人気で株価が急上昇したそうである。
そういえば、クヌート(Knut)はクヌース(Knuth,アルゴリズムの大家、TeXとか作った人)と一字違いだな。(それだけ)

 

//
//  Literal data seledctor
//  (c)2007 BakaOyaji
//  $Id
//
//
`include "pic_instructions.h"
`include "pic_def.h"

module literal_dsel(
    input  [(`Instruction_Len-1):0]   instruction_i,
    input [7:0] read_bus_i ,    // data from READ BUS
    output [7:0] b_o             // feeding data to b_bus
);

reg  [7:0] b_o ;

    always@( instruction_i or read_bus_i) begin
        b_o <= 8'bxxxx_xxxx ;
        casex( instruction_i)
            // Byte oriented File Register Operations
            `INST_ADDWF ,
            `INST_ANDWF ,
            `INST_COMF  ,
            `INST_DECF   ,
            `INST_DECFSZ ,
            `INST_INCF   ,
            `INST_INCFSZ ,
            `INST_IORWF  ,
            `INST_MOVF   ,
            `INST_RLF   ,
            `INST_RRF   ,
            `INST_SUBWF , 
            `INST_SWAPF  ,
            `INST_XORWF  ,
            `INST_BCF  , 
            `INST_BSF   ,
            `INST_BTFSC ,
            `INST_BTFSS  :
                b_o <= read_bus_i ;
            `INST_ADDLW , 
            `INST_ANDLW  ,
            `INST_IORLW  ,
            `INST_MOVLW ,
            `INST_RETLW ,
            `INST_SUBLW ,
            `INST_XORLW :
                b_o <= instruction_i[7:0] ;
            default :
                b_o <= 8'bxxxx_xxxx ;
        endcase // casex
    end // always

endmodule //literal_dsel
// EOF literal_dsel.v



コメント

Verilog2001構文について

いつもお世話になっています。本当にCPU作りは楽しいですね。
多分、合成でエラーとなるので、2001スタイルに統一した方がよろしいかと思います。(はい。Vertakの構文チェックが少し、甘いです。)
=> output reg [7:0] b_o

ところで,組み合わせ回路では、always @* begin..とすると、いちいち信号を書かなくてもよいので便利です。



  • 2007/08/09(木) 10:58:54 |
  • URL |
  • たっく #79D/WHSg
  • [ 編集 ]

Re:Verilog2001構文について(08/08)

たっくさん,おはようございます。
コメントありがとうございます。
>多分、合成でエラーとなるので、2001スタイルに統一した方がよろしいかと思います。
はい、そうします(笑)
>ところで,組み合わせ回路では、always @* begin..とすると、いちいち信号を書かなくてもよいので便利です。
そうですね。合成系もXSTとかでもサポートしているようなので、使うことにします、というか、Verilog-2001compliantに書き換え中です。
では、では。

  • 2007/08/10(金) 06:14:35 |
  • URL |
  • 莫迦オヤジ #79D/WHSg
  • [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/364-677c6be3
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。