| 
                                         12  | 
                
		    BSVによるメモリダンプモジュールの設計 (3) | 
		
前稿の疑似コードをBSVに変換します。作成したBSVプログラムを以下に示します。
Tb.bsv
import StmtFSM::*;
import mkUart::*;
import RegFile::*;
typedef Bit#(16) Addr_t;
typedef Bit#(4) Data_t;
typedef Bit#(8) Byte;
(* synthesize *)
module mkTb();
      RegFile#(Addr_t, Data_t) rom <- mkRegFileLoad("data.hex", 0, 65535);
      Reg#(Addr_t) address <- mkReg(0);
      Reg#(Data_t) data <- mkReg(0);
      Reg#(Byte) byteData <- mkReg(0);
      Reg#(int) x <- mkReg(0);
      Reg#(int) y <- mkReg(0);
      Reg#(Data_t) checksum <- mkReg(0);
      Uart_ifc uart <- mkUart();
      function Stmt nibbleOut(Data_t nibble);
            return (seq
                  byteData <= extend(nibble) + (nibble >= 10) ? (- 10 + 8'h61) : 8'h30;
                  uart.load(byteData);
                  // $write("%c", byteData);
            endseq);
      endfunction: nibbleOut
      Stmt test = seq
            for (y <= 0; y <= 255; y <= y + 1) seq
                  checksum <= 0;
                  for (x <= 0; x <= 255; x <= x + 1) seq
                        data <= rom.sub(address);
                        address <= address + 1;
                        checksum <= checksum + extend(data);
                        nibbleOut(data);
                  endseq
                  nibbleOut(truncate(checksum >> 4));
                  nibbleOut(truncate(checksum));
                  uart.load(8'h0a); // LF
                  // $display("");
            endseq
            await(uart.done());
            $finish;
      endseq;
      mkAutoFSM(test);
endmodule
    
    
    
Leave a Comment