PICを作ろう ,データセレクタ ~昼休みにまったり進めるプロジェクト
今日は、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 // alwaysendmodule //literal_dsel// EOF literal_dsel.v