OSDN Git Service

commit test files
authorbols <bols-blue@lnc.jp>
Thu, 11 Aug 2011 12:36:50 +0000 (21:36 +0900)
committerbols <bols-blue@lnc.jp>
Thu, 11 Aug 2011 12:36:50 +0000 (21:36 +0900)
test runner
テストが実行できるようになった

USB_Keybord_MAX3421E/src/Makefile
USB_Keybord_MAX3421E/src/SPI_controler.cpp [new file with mode: 0644]
USB_Keybord_MAX3421E/src/SPI_controler.h [new file with mode: 0644]
USB_Keybord_MAX3421E/src/SPI_controler_tb.sc
USB_Keybord_MAX3421E/src/SPI_controler_test_case.cpp [new file with mode: 0644]
USB_Keybord_MAX3421E/src/SPI_controler_top.cpp [new file with mode: 0644]
USB_Keybord_MAX3421E/src/SPI_controler_top.h [new file with mode: 0644]
USB_Keybord_MAX3421E/src/TestMain.cpp [new file with mode: 0644]

index 9ae9207..4852da3 100644 (file)
@@ -1,14 +1,27 @@
 SRCS=\
 SPI_controler.nsl
 
+CPP_SRCS=\
+SPI_controler.cpp\
+SPI_controler_test_case.cpp\
+SPI_controler_top.cpp
+LDFLAGS= -L/home/bols/systemc-2.2.0/lib-linux 
+LDLIBS= -lcppunit -lsystemc
+CXXFLAGS= -I/home/bols/systemc-2.2.0/include
+INC= -I/home/bols/systemc-2.2.0/include
 SC_SRCS=$(patsubst %.nsl,%.sc,$(filter %.nsl,$(SRCS)))
+OBJCS=$(patsubst %.cpp,%.o,$(filter %.cpp,$(CPP_SRCS)))
 
 .SUFFIXES: .o .sc .nsl
 
-all:create_sc
+all:create_sc runtest
        echo $(SC_SRCS)
 
 create_sc:$(SC_SRCS)
 
+TestMain:$(OBJCS) TestMain.cpp
+
 .nsl.sc:
        nsl2sc $<
+
+SPI_controler_top.o: 
diff --git a/USB_Keybord_MAX3421E/src/SPI_controler.cpp b/USB_Keybord_MAX3421E/src/SPI_controler.cpp
new file mode 100644 (file)
index 0000000..2c41589
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ Produced by NSL Core(version=20110614), IP ARCH, Inc. Wed Aug 10 21:05:17 2011
+ Licensed to :LIMITED EVALUATION USER:
+*/
+/*
+ EVALUATION COPY!   DO NOT USE ANY PART OF THIS FILE FOR COMMERCIAL PRODUCTS. 
+*/
+#include <systemc.h>
+template<typename T> int _nsl_readmem(T array[], const char *file, int start, int end, int sft) ;
+
+SC_MODULE( spi_controler ) {
+sc_in<bool> p_reset, m_clock;
+ sc_in <sc_uint<8> >  send_data;
+sc_out <sc_uint<8> > resv_data;
+sc_in<bool> send;
+sc_in<bool> read_MOSI;
+sc_in<bool> write_MOSO;
+  sc_signal<sc_uint<8> > output_data;
+  sc_signal<sc_uint<8> > input_data;
+  sc_signal<sc_uint<1> > work_flg;
+
+void _sc_method_output_data() {
+
+}
+void _sc_method_input_data() {
+
+}
+void _sc_method_work_flg() {
+
+}
+    SC_CTOR( spi_controler )
+ : 
+  output_data("output_data"),
+  input_data("input_data"),
+  work_flg("work_flg"),
+  send_data("send_data"),
+  resv_data("resv_data"),
+  p_reset("p_reset"),
+  m_clock("m_clock")
+     {
+};
+};
+/*
+ Produced by NSL Core(version=20110614), IP ARCH, Inc. Wed Aug 10 21:05:17 2011
+ Licensed to :LIMITED EVALUATION USER:
+*/
diff --git a/USB_Keybord_MAX3421E/src/SPI_controler.h b/USB_Keybord_MAX3421E/src/SPI_controler.h
new file mode 100644 (file)
index 0000000..e2f2b06
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ Produced by NSL Core(version=20110614), IP ARCH, Inc. Wed Aug 10 21:05:17 2011
+ Licensed to :LIMITED EVALUATION USER:
+*/
+/*
+ EVALUATION COPY!   DO NOT USE ANY PART OF THIS FILE FOR COMMERCIAL PRODUCTS. 
+*/
+#include <systemc.h>
+template<typename T> int _nsl_readmem(T array[], const char *file, int start, int end, int sft) ;
+
+SC_MODULE( spi_controler ) {
+sc_in<bool> p_reset, m_clock;
+ sc_in <sc_uint<8> >  send_data;
+sc_out <sc_uint<8> > resv_data;
+sc_in<bool> send;
+sc_in<bool> read_MOSI;
+sc_in<bool> write_MOSO;
+  sc_signal<sc_uint<8> > output_data;
+  sc_signal<sc_uint<8> > input_data;
+  sc_signal<sc_uint<1> > work_flg;
+
+void _sc_method_output_data() ;
+
+void _sc_method_input_data() ;
+
+void _sc_method_work_flg() ;
+
+    SC_CTOR( spi_controler )
+ : 
+  output_data("output_data"),
+  input_data("input_data"),
+  work_flg("work_flg"),
+  send_data("send_data"),
+  resv_data("resv_data"),
+  p_reset("p_reset"),
+  m_clock("m_clock")
+     {
+};
+};
+/*
+ Produced by NSL Core(version=20110614), IP ARCH, Inc. Wed Aug 10 21:05:17 2011
+ Licensed to :LIMITED EVALUATION USER:
+*/
index 93c67c1..3323749 100644 (file)
-/*\r
- Produced by NSL Core(version=20101103), IP ARCH, Inc. Wed Aug 10 18:37:57 2011\r
- Licensed to :LIMITED EVALUATION USER:\r
-*/\r
-#include <systemc.h>\r
-#include "spi_controler.sc"\r
-#include <stdlib.h>\r
-sc_clock m_clock("m_clock",10,0.5,0,false);\r
-sc_signal<bool> p_reset;\r
-sc_signal<sc_uinit<8> > send_data;\r
-sc_signal<sc_uinit<8> > resv_data;\r
-sc_signal<sc_uint<1> > send;\r
-sc_signal<sc_uint<1> > read_MOSI;\r
-sc_signal<sc_uint<1> > write_MOSO;\r
-\r
-spi_controler spi_controler("spi_controler");\r
-\r
-static int ctrl_clock=0;\r
-SC_MODULE (c_clock) {\r
-       sc_in<bool> m_clock;\r
-       void do_reset() {\r
-               ctrl_clock++;\r
-               if(ctrl_clock==0) p_reset=1;\r
-               if(ctrl_clock==1) p_reset=0\r
-       }\r
-       SC_CTOR(c_clock) {\r
-               SC_METHOD(do_reset);\r
-               sensitive << m_clock.pos();\r
-       }\r
-};\r
-\r
-int sc_main(int argc, char *argv[])\r
-{\r
-       int stop;\r
-       if(argc>1 && (stop=atoi(argv[1])<=0)) stop=1000;\r
-       sc_trace_file *tf = sc_create_vcd_trace_file("spi_controler");\r
-       sc_trace(tf,spi_controler.p_reset,"spi_controler.p_reset");\r
-       sc_trace(tf,spi_controler.m_clock,"spi_controler.m_clock");\r
-       sc_trace(tf,spi_controler.send_data,"spi_controler.send_data");\r
-       sc_trace(tf,spi_controler.resv_data,"spi_controler.resv_data");\r
-       sc_trace(tf,spi_controler.send,"spi_controler.send");\r
-       sc_trace(tf,spi_controler.read_MOSI,"spi_controler.read_MOSI");\r
-       sc_trace(tf,spi_controler.write_MOSO,"spi_controler.write_MOSO");\r
-       c_clock cclk("cclk");\r
-       cclk.m_clock(m_clock);\r
-       spi_controler.p_reset(p_reset);\r
-       spi_controler.m_clock(m_clock);\r
-       spi_controler.send_data(send_data);\r
-       spi_controler.resv_data(resv_data);\r
-       spi_controler.send(send);\r
-       spi_controler.read_MOSI(read_MOSI);\r
-       spi_controler.write_MOSO(write_MOSO);\r
-       sc_start(stop, SC_NS);\r
-       sc_close_vcd_trace_file(tf)\r
-}\r
-/*\r
- Produced by NSL Core(version=20101103), IP ARCH, Inc. Wed Aug 10 18:37:57 2011\r
- Licensed to :LIMITED EVALUATION USER:\r
-*/\r
+/*
+ Produced by NSL Core(version=20110614), IP ARCH, Inc. Wed Aug 10 21:04:09 2011
+ Licensed to :LIMITED EVALUATION USER:
+*/
+/*
+ EVALUATION COPY!   DO NOT USE ANY PART OF THIS FILE FOR COMMERCIAL PRODUCTS. 
+*/
+#include <systemc.h>
+#include "SPI_controler.sc"
+#include <stdio.h>
+#include <stdlib.h>
+template<typename T> int _nsl_readmem(T array[], const char *file, int start, int end, int sft) ;
+sc_clock m_clock("m_clock",10, SC_NS, 0.5,0, SC_NS, false);
+sc_signal<bool> p_reset;
+sc_signal<sc_uint<8> > send_data;
+sc_signal<sc_uint<8> > resv_data;
+sc_signal<sc_uint<1> > send;
+sc_signal<sc_uint<1> > read_MOSI;
+sc_signal<sc_uint<1> > write_MOSO;
+
+spi_controler spi_controler("spi_controler");
+
+static int ctrl_clock=0;
+SC_MODULE (c_clock) {
+       sc_in<bool> m_clock;
+       void do_reset() {
+               ctrl_clock++;
+               if(ctrl_clock<2) p_reset=1;
+               else p_reset=0;
+       }
+       SC_CTOR(c_clock) {
+               SC_METHOD(do_reset);
+               sensitive << m_clock.pos();
+       }
+};
+
+int sc_main(int argc, char *argv[])
+{
+       int stop;
+       if(argc<2 || (stop=atoi(argv[1]))<=0) stop=1000000;
+       sc_trace_file *tf = sc_create_vcd_trace_file("spi_controler");
+       tf->set_time_unit(1, SC_NS);
+       sc_trace(tf,spi_controler.send_data,"spi_controler.send_data");
+       sc_trace(tf,spi_controler.resv_data,"spi_controler.resv_data");
+       sc_trace(tf,spi_controler.send,"spi_controler.send");
+       sc_trace(tf,spi_controler.read_MOSI,"spi_controler.read_MOSI");
+       sc_trace(tf,spi_controler.write_MOSO,"spi_controler.write_MOSO");
+       sc_trace(tf,spi_controler.p_reset,"spi_controler.p_reset");
+       sc_trace(tf,spi_controler.m_clock,"spi_controler.m_clock");
+       sc_trace(tf,spi_controler.output_data,"spi_controler.output_data");
+       sc_trace(tf,spi_controler.input_data,"spi_controler.input_data");
+       sc_trace(tf,spi_controler.work_flg,"spi_controler.work_flg");
+       c_clock cclk("cclk");
+       cclk.m_clock(m_clock);
+       spi_controler.p_reset(p_reset);
+       spi_controler.m_clock(m_clock);
+       spi_controler.send_data(send_data);
+       spi_controler.resv_data(resv_data);
+       spi_controler.send(send);
+       spi_controler.read_MOSI(read_MOSI);
+       spi_controler.write_MOSO(write_MOSO);
+       sc_start(stop, SC_NS);
+       sc_close_vcd_trace_file(tf);
+}
+
+template<typename T> int _nsl_readmem(T array[], const char *file, int start, int end, int sft) {
+       FILE *txt;
+       uint64_t addr,data;
+       int i,bit,c,lastch,incomm;
+       if((txt=fopen(file,"r"))==NULL) {
+               return(1);
+       }
+       addr = start;
+       data =  0;
+       lastch=0;
+       incomm=0;
+       while((c=fgetc(txt))!=EOF) {
+               unsigned int ch;
+               if(incomm) {
+                       if(c=='\n') incomm=0;
+                       continue;
+               }
+               if(c=='#') {incomm++; continue;}
+               if(c=='_' || c=='\r' ) continue;
+               if(!lastch && (c==' ' || c=='\t' || c=='\n') ) continue;
+               lastch=c;
+               ch = c - 97;
+               if(sft==4 && ch<6) {
+                       data=(data << sft);
+                       data = (data + ch + 10);
+               }
+               else if(sft==4 && ch+32 < 6) {
+                       data=(data << sft);
+                       data = (data + ch + 32 + 10);
+               }
+               else if(sft==4 && ch+49 < 10) {
+                       data=(data << sft);
+                       data = (data + ch + 49);
+               }
+               else if(sft==1 && ch+49 < 2) {
+                       data=(data << sft);
+                       data = (data + ch + 49);
+               }
+               else {
+                       array[addr] =  data;
+                       addr++;
+                       if(addr>=end) break;
+                       lastch=0;
+                       data=0;
+                       continue;
+               }
+       }
+       fclose(txt);
+       return 0;
+}
+void _nsl_hook(char *file, int line, int attrib, const char *name) {}
diff --git a/USB_Keybord_MAX3421E/src/SPI_controler_test_case.cpp b/USB_Keybord_MAX3421E/src/SPI_controler_test_case.cpp
new file mode 100644 (file)
index 0000000..ee47381
--- /dev/null
@@ -0,0 +1,53 @@
+#include <cppunit/extensions/HelperMacros.h> //
+#include "SPI_controler_top.h"
+
+// 以下はSPIControlerTestクラスの宣言-----
+class SPIControlerTest : public CPPUNIT_NS::TestFixture { //
+  CPPUNIT_TEST_SUITE( SPIControlerTest ); //
+  CPPUNIT_TEST( test_init );         //
+  CPPUNIT_TEST( test_incr );         //
+  CPPUNIT_TEST( test_clear );        //
+  CPPUNIT_TEST_SUITE_END();          //
+
+protected:
+  SPIControlerTop* c_;
+
+public:
+  void setUp();      //
+  void tearDown();   //
+
+protected:
+  void test_init();  //
+  void test_incr();  //
+  void test_clear(); //
+};
+
+// 以下はSPIControlerTestクラスの実装-----
+
+CPPUNIT_TEST_SUITE_REGISTRATION( SPIControlerTest ); //
+
+// 各テスト・ケースの実行直前に呼ばれる
+void SPIControlerTest::setUp() {
+  c_ = new SPIControlerTop();
+}
+
+// 各テスト・ケースの実行直後に呼ばれる
+void SPIControlerTest::tearDown() {
+  delete c_;
+}
+
+// これ以降はテスト・ケースの実装内容
+
+void SPIControlerTest::test_init() {
+  CPPUNIT_ASSERT_EQUAL(0,(int) c_->read_MOSI()); //
+}
+
+void SPIControlerTest::test_incr() {
+  for ( int i = 1; i < 10; ++i ) {
+    CPPUNIT_ASSERT_EQUAL(i,(int) c_->read_MOSI()); //
+  }
+}
+
+void SPIControlerTest::test_clear() {
+  CPPUNIT_ASSERT_EQUAL(0,(int) c_->read_MOSI()); //
+} 
diff --git a/USB_Keybord_MAX3421E/src/SPI_controler_top.cpp b/USB_Keybord_MAX3421E/src/SPI_controler_top.cpp
new file mode 100644 (file)
index 0000000..3dcc022
--- /dev/null
@@ -0,0 +1,137 @@
+/*\r
+ Produced by NSL Core(version=20110614), IP ARCH, Inc. Wed Aug 10 21:04:09 2011\r
+ Licensed to :LIMITED EVALUATION USER:\r
+*/\r
+/*\r
+ EVALUATION COPY!   DO NOT USE ANY PART OF THIS FILE FOR COMMERCIAL PRODUCTS. \r
+*/\r
+#include "SPI_controler.h"\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+template<typename T> int _nsl_readmem(T array[], const char *file, int start, int end, int sft) ;\r
+sc_clock m_clock("m_clock",10, SC_NS, 0.5,0, SC_NS, false);\r
+sc_signal<bool> p_reset;\r
+sc_signal<sc_uint<8> > send_data;\r
+sc_signal<sc_uint<8> > resv_data;\r
+\r
+spi_controler spi_controler("spi_controler");\r
+\r
+static int ctrl_clock=0;\r
+SC_MODULE (c_clock) {\r
+       sc_in<bool> m_clock;\r
+       void do_reset() {\r
+               ctrl_clock++;\r
+               if(ctrl_clock<2) p_reset=1;\r
+               else p_reset=0;\r
+       }\r
+       SC_CTOR(c_clock) {\r
+               SC_METHOD(do_reset);\r
+               sensitive << m_clock.pos();\r
+       }\r
+};\r
+\r
+template<typename T> int _nsl_readmem(T array[], const char *file, int start, int end, int sft) {\r
+       FILE *txt;\r
+       uint64_t addr,data;\r
+       int i,bit,c,lastch,incomm;\r
+       if((txt=fopen(file,"r"))==NULL) {\r
+               return(1);\r
+       }\r
+       addr = start;\r
+       data =  0;\r
+       lastch=0;\r
+       incomm=0;\r
+       while((c=fgetc(txt))!=EOF) {\r
+               unsigned int ch;\r
+               if(incomm) {\r
+                       if(c=='\n') incomm=0;\r
+                       continue;\r
+               }\r
+               if(c=='#') {incomm++; continue;}\r
+               if(c=='_' || c=='\r' ) continue;\r
+               if(!lastch && (c==' ' || c=='\t' || c=='\n') ) continue;\r
+               lastch=c;\r
+               ch = c - 97;\r
+               if(sft==4 && ch<6) {\r
+                       data=(data << sft);\r
+                       data = (data + ch + 10);\r
+               }\r
+               else if(sft==4 && ch+32 < 6) {\r
+                       data=(data << sft);\r
+                       data = (data + ch + 32 + 10);\r
+               }\r
+               else if(sft==4 && ch+49 < 10) {\r
+                       data=(data << sft);\r
+                       data = (data + ch + 49);\r
+               }\r
+               else if(sft==1 && ch+49 < 2) {\r
+                       data=(data << sft);\r
+                       data = (data + ch + 49);\r
+               }\r
+               else {\r
+                       array[addr] =  data;\r
+                       addr++;\r
+                       if(addr>=end) break;\r
+                       lastch=0;\r
+                       data=0;\r
+                       continue;\r
+               }\r
+       }\r
+       fclose(txt);\r
+       return 0;\r
+}\r
+void _nsl_hook(char *file, int line, int attrib, const char *name) {}\r
+\r
+#include "SPI_controler_top.h"\r
+SPIControlerTop::SPIControlerTop()\r
+{\r
+sc_signal<bool> send;\r
+sc_signal<bool> read_MOSI;\r
+sc_signal<bool> write_MOSO;\r
+       int stop;\r
+       tf = sc_create_vcd_trace_file("spi_controler");\r
+       tf->set_time_unit(1, SC_NS);\r
+       sc_trace(tf,spi_controler.send_data,"spi_controler.send_data");\r
+       sc_trace(tf,spi_controler.resv_data,"spi_controler.resv_data");\r
+       sc_trace(tf,spi_controler.send,"spi_controler.send");\r
+       sc_trace(tf,spi_controler.read_MOSI,"spi_controler.read_MOSI");\r
+       sc_trace(tf,spi_controler.write_MOSO,"spi_controler.write_MOSO");\r
+       sc_trace(tf,spi_controler.p_reset,"spi_controler.p_reset");\r
+       sc_trace(tf,spi_controler.m_clock,"spi_controler.m_clock");\r
+       sc_trace(tf,spi_controler.output_data,"spi_controler.output_data");\r
+       sc_trace(tf,spi_controler.input_data,"spi_controler.input_data");\r
+       sc_trace(tf,spi_controler.work_flg,"spi_controler.work_flg");\r
+       c_clock cclk("cclk");\r
+       cclk.m_clock(m_clock);\r
+       spi_controler.p_reset(p_reset);\r
+       spi_controler.m_clock(m_clock);\r
+       spi_controler.send_data(send_data);\r
+       spi_controler.resv_data(resv_data);\r
+       spi_controler.send(send);\r
+       spi_controler.read_MOSI(read_MOSI);\r
+       spi_controler.write_MOSO(write_MOSO);\r
+}\r
+\r
+SPIControlerTop::~SPIControlerTop()\r
+{\r
+       sc_close_vcd_trace_file(tf);\r
+}\r
+\r
+void SPIControlerTop::nextStep()\r
+{\r
+}\r
+\r
+void SPIControlerTop::send()\r
+{\r
+}\r
+\r
+char SPIControlerTop::read_MOSI()\r
+{\r
+       return 0;\r
+}\r
+\r
+void SPIControlerTop::write_MOSO(char send_data)\r
+{\r
+}\r
+\r
diff --git a/USB_Keybord_MAX3421E/src/SPI_controler_top.h b/USB_Keybord_MAX3421E/src/SPI_controler_top.h
new file mode 100644 (file)
index 0000000..26e4914
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __SPI_CONTROLER_TOP_H__
+#define __SPI_CONTROLER_TOP_H__
+#include <systemc.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+class SPIControlerTop { 
+public :
+       sc_trace_file *tf;
+       SPIControlerTop();
+       ~SPIControlerTop();
+       void nextStep();
+       void send();
+       char read_MOSI();
+       void write_MOSO(char send_data);
+
+};
+#endif /* __SPI_CONTROLER_TOP_H__ */
diff --git a/USB_Keybord_MAX3421E/src/TestMain.cpp b/USB_Keybord_MAX3421E/src/TestMain.cpp
new file mode 100644 (file)
index 0000000..0a94554
--- /dev/null
@@ -0,0 +1,30 @@
+#include <cppunit/BriefTestProgressListener.h>
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/TestResult.h>
+#include <cppunit/TestResultCollector.h>
+#include <cppunit/TestRunner.h>
+#include <systemc.h>
+int sc_main( int argc, char* argv[] ) {
+  // イベント・マネージャとテスト・コントローラを生成する
+  CPPUNIT_NS::TestResult controller;
+
+  // テスト結果収集リスナをコントローラにアタッチする
+  CPPUNIT_NS::TestResultCollector result;
+  controller.addListener( &result );
+
+  // 「.」で進行状況を出力するリスナをアタッチする
+  CPPUNIT_NS::BriefTestProgressListener progress;
+  controller.addListener( &progress );
+
+  // テスト・ランナーにテスト群を与え、テストする
+  CPPUNIT_NS::TestRunner runner;
+  runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
+  runner.run( controller );
+
+  // テスト結果を標準出力に吐き出す
+  CPPUNIT_NS::CompilerOutputter outputter( &result, CPPUNIT_NS::stdCOut() );
+  outputter.write();
+
+  return result.wasSuccessful() ? 0 : 1;
+}