亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fifo.v

?? SystemC可以由C語言直接開發(fā)硬件
?? V
字號:
// Synchronous FIFO.  4 x 16 bit words.
//
module fifo (clk, rstp, din, writep, readp, dout, emptyp, fullp);
input		clk;
input		rstp;
input [15:0]	din;
input		readp;
input		writep;
output [15:0]	dout;
output		emptyp;
output		fullp;

// Defines sizes in terms of bits.
//
parameter	DEPTH = 2,		// 2 bits, e.g. 4 words in the FIFO.
		MAX_COUNT = 2'b11;	// topmost address in FIFO.

reg 		emptyp;
reg		fullp;

// Registered output.
reg [15:0]	dout;

// Define the FIFO pointers.  A FIFO is essentially a circular queue.
//
reg [(DEPTH-1):0]	tail;
reg [(DEPTH-1):0]	head;

// Define the FIFO counter.  Counts the number of entries in the FIFO which
// is how we figure out things like Empty and Full.
//
reg [(DEPTH-1):0]	count;

// Define our regsiter bank.  This is actually synthesizable!
//
reg [15:0] fifomem[0:MAX_COUNT];

// Dout is registered and gets the value that tail points to RIGHT NOW.
//
always @(posedge clk) begin
   if (rstp == 1) begin
      dout <= 16'h0000;
   end
   else begin
      dout <= fifomem[tail];
   end
end 
     
// Update FIFO memory.
always @(posedge clk) begin
   if (rstp == 1'b0 && writep == 1'b1 && fullp == 1'b0) begin
      fifomem[head] <= din;
   end
end
                  
// Update the head register.
//
always @(posedge clk) begin
   if (rstp == 1'b1) begin
      head <= 2'b00;
   end
   else begin
      if (writep == 1'b1 && fullp == 1'b0) begin
         // WRITE
         head <= head + 1;
      end
   end
end

// Update the tail register.
//
always @(posedge clk) begin
   if (rstp == 1'b1) begin
      tail <= 2'b00;
   end
   else begin
      if (readp == 1'b1 && emptyp == 1'b0) begin
         // READ               
         tail <= tail + 1;
      end
   end
end

// Update the count regsiter.
//
always @(posedge clk) begin
   if (rstp == 1'b1) begin
      count <= 2'b00;
   end
   else begin
      case ({readp, writep})
         2'b00: count <= count;
         2'b01: 
            // WRITE
            if (count != MAX_COUNT) 
               count <= count + 1;
         2'b10: 
            // READ
            if (count != 2'b00)
               count <= count - 1;
         2'b11:
            // Concurrent read and write.. no change in count
            count <= count;
      endcase
   end
end

         
// *** Update the flags
//
// First, update the empty flag.
//
always @(count) begin
   if (count == 2'b00)
      emptyp <= 1'b1;
   else
      emptyp <= 1'b0;
end


// Update the full flag
//
always @(count) begin
   if (count == MAX_COUNT)
      fullp <= 1'b1;
   else
      fullp <= 1'b0;
end

endmodule

// synopsys translate_off

`define TEST_FIFO
// synopsys translate_off
`ifdef TEST_FIFO
module test_fifo;

reg		clk;
reg		rstp;
reg [15:0]	din;
reg		readp;
reg		writep;
wire [15:0]	dout;
wire		emptyp;
wire		fullp;

reg [15:0]	value;

fifo U1 (
   .clk		(clk),
   .rstp	(rstp),
   .din		(din),
   .readp	(readp),
   .writep	(writep),
   .dout	(dout),
   .emptyp	(emptyp),
   .fullp	(fullp)
);

task read_word;
begin
   @(negedge clk);
   readp = 1;
   @(posedge clk) #5;
   $display ("Read %0h from FIFO", dout);
   readp = 0;
end
endtask
   
task write_word;
input [15:0]	value;
begin
   @(negedge clk);
   din = value;
   writep = 1;
   @(posedge clk);
   $display ("Write %0h to FIFO", din);
   #5;
   din = 16'hzzzz;
   writep = 0;
end
endtask

initial begin
   clk = 0;
   forever begin
      #10 clk = 1;
      #10 clk = 0;
   end
end

initial begin
   $shm_open ("./fifo.shm");
   $shm_probe (test_fifo, "AS");
   
   //test1;
   test2;
   
   $shm_close;
   $finish;
end

task test1;
begin
   din = 16'hzzzz;
   writep = 0;
   readp = 0;

   // Reset
   rstp = 1;
   #50;
   rstp = 0;
   #50;
   
   // ** Write 3 values.
   write_word (16'h1111);
   write_word (16'h2222);
   write_word (16'h3333);
   
   // ** Read 2 values
   read_word;
   read_word;
   
   // ** Write one more
   write_word (16'h4444);
   
   // ** Read a bunch of values
   repeat (6) begin
      read_word;
   end
   
   // *** Write a bunch more values
   write_word (16'h0001);
   write_word (16'h0002);
   write_word (16'h0003);
   write_word (16'h0004);
   write_word (16'h0005);
   write_word (16'h0006);
   write_word (16'h0007);
   write_word (16'h0008);

   // ** Read a bunch of values
   repeat (6) begin
      read_word;
   end
   
   $display ("Done TEST1.");
end
endtask

// TEST2
//
// This test will operate the FIFO in an orderly manner the way it normally works.
// 2 threads are forked; a reader and a writer.  The writer writes a counter to
// the FIFO and obeys the fullp flag and delays randomly.  The reader likewise
// obeys the emptyp flag and reads at random intervals.  The result should be that
// the reader reads the incrementing counter out of the FIFO.  The empty/full flags
// should bounce around depending on the random delays.  The writer repeats some
// fixed number of times and then terminates both threads and kills the sim.
//
task test2;
reg [15:0] writer_counter;
begin
   writer_counter = 16'h0001;
   din = 16'hzzzz;
   writep = 0;
   readp = 0;

   // Reset
   rstp = 1;
   #50;
   rstp = 0;
   #50;
   
   fork
      // Writer
      begin
         repeat (500) begin
            @(negedge clk);
            if (fullp == 1'b0) begin
               write_word (writer_counter);
               #5;
               writer_counter = writer_counter + 1;
            end
            else begin
               $display ("WRITER is waiting..");
            end
            // Delay a random amount of time between 0ns and 100ns
            #(50 + ($random % 50));
         end
         $display ("Done with WRITER fork..");
         $finish;
      end
      
      // Reader
      begin
         forever begin
            @(negedge clk);
            if (emptyp == 1'b0) begin
               read_word;
            end  
            else begin
               $display ("READER is waiting..");
            end
            // Delay a random amount of time between 0ns and 100ns
            #(50 + ($random % 50));
         end
      end
   join
end
endtask

always @(fullp)
   $display ("fullp = %0b", fullp);
   
always @(emptyp)
   $display ("emptyp = %0b", emptyp);

always @(U1.head)
   $display ("head = %0h", U1.head);

always @(U1.tail)
   $display ("tail = %0h", U1.tail);

endmodule
`endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九色porny丨国产精品| 国产成人av电影在线观看| 免费观看91视频大全| 国产91精品露脸国语对白| 精品日韩一区二区| 亚洲人精品一区| 久久国产乱子精品免费女| 成人黄动漫网站免费app| 欧美精品色综合| 国产精品乱码一区二三区小蝌蚪| 日一区二区三区| 9i在线看片成人免费| 日韩美女在线视频| 亚洲国产一区二区三区青草影视| 国产91在线看| 亚洲精品一区二区三区99| 亚洲一二三专区| 99国产精品久久久久| 精品国产一区二区三区av性色 | 91精品办公室少妇高潮对白| 欧美电影免费观看高清完整版 | 一区二区中文字幕在线| 韩国一区二区三区| 日韩一区二区三区高清免费看看| 亚洲女同女同女同女同女同69| 国产精品小仙女| 精品国产免费一区二区三区香蕉| 亚洲国产日韩综合久久精品| 不卡的av在线播放| 国产欧美日韩麻豆91| 国产一区二区福利视频| 日韩亚洲欧美在线观看| 午夜视频一区在线观看| 在线欧美一区二区| 亚洲最色的网站| 色婷婷精品久久二区二区蜜臂av | 国产成人在线视频网站| 久久这里只精品最新地址| 日日欢夜夜爽一区| 666欧美在线视频| 亚洲h动漫在线| 6080亚洲精品一区二区| 日本女人一区二区三区| 欧美一区二区三区不卡| 人人爽香蕉精品| 精品成a人在线观看| 精品午夜久久福利影院| 国产亚洲午夜高清国产拍精品| 国产一区二区精品久久91| 国产蜜臀av在线一区二区三区| 国产一区亚洲一区| 欧美韩国日本不卡| 91看片淫黄大片一级在线观看| 亚洲男人电影天堂| 欧美日韩综合在线| 日本在线不卡视频| 精品久久国产字幕高潮| 国产美女娇喘av呻吟久久| 欧美激情一区二区在线| 91在线视频在线| 五月综合激情网| 久久网站热最新地址| 成人毛片在线观看| 亚洲va国产天堂va久久en| 欧美一区二区三区免费大片 | 欧美日韩国产高清一区二区三区| 午夜久久久久久| 久久久www免费人成精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美一区二区三区免费视频| 国产精品综合一区二区三区| 亚洲欧美日韩小说| 欧美一区二区成人| 成人av在线电影| 亚洲国产三级在线| 国产午夜精品一区二区三区嫩草| 99精品一区二区三区| 日韩精品一二三| 欧美激情一区三区| 欧美日韩一区国产| 成人亚洲精品久久久久软件| 午夜天堂影视香蕉久久| 国产精品久久午夜夜伦鲁鲁| 欧美一区三区二区| 99精品在线观看视频| 精品一二线国产| 亚洲va欧美va人人爽| 中文一区二区在线观看| 91精品国产高清一区二区三区| www.日韩av| 精品一区二区三区不卡| 亚洲日本韩国一区| 国产欧美日本一区二区三区| 777午夜精品免费视频| 97精品视频在线观看自产线路二| 蜜臀久久99精品久久久久宅男| 亚洲激情av在线| 国产拍揄自揄精品视频麻豆| 欧美一区二区在线播放| 在线欧美日韩国产| av一二三不卡影片| 国产麻豆精品视频| 蜜臀av一区二区| 亚洲高清视频在线| 一区二区三区蜜桃| 国产精品久线在线观看| 国产拍揄自揄精品视频麻豆 | 欧美久久婷婷综合色| 色婷婷av一区二区| 高清不卡一区二区在线| 激情av综合网| 久久精品国产**网站演员| 亚洲成人激情综合网| 亚洲一区成人在线| 亚洲在线视频网站| 亚洲国产精品久久一线不卡| 一区二区三区美女视频| 综合久久久久综合| 亚洲色图一区二区| 亚洲女与黑人做爰| 一片黄亚洲嫩模| 一区二区三区在线免费播放| 亚洲女同一区二区| 亚洲另类春色国产| 亚洲国产另类精品专区| 亚洲综合免费观看高清在线观看| 亚洲另类中文字| 亚洲一区二区偷拍精品| 一区二区在线观看视频| 亚洲主播在线播放| 视频一区中文字幕| 亚洲电影一级黄| 极品美女销魂一区二区三区免费| 国产一级精品在线| av午夜精品一区二区三区| 成人动漫一区二区在线| 一本一本久久a久久精品综合麻豆| 欧美伊人久久大香线蕉综合69| 在线播放一区二区三区| 久久综合九色综合欧美98| 国产日韩精品一区二区浪潮av| 国产精品欧美一区喷水| 性久久久久久久| 国内成人精品2018免费看| 不卡在线观看av| 欧美精品在线观看播放| 26uuu国产电影一区二区| 中文字幕一区二区三区四区| 偷偷要91色婷婷| 成人不卡免费av| 欧美日韩国产欧美日美国产精品| 久久亚洲影视婷婷| 亚洲一二三级电影| 成人永久免费视频| 欧美精品 日韩| 国产精品乱人伦一区二区| 日韩国产欧美在线观看| 99精品视频一区| 欧美电影免费观看高清完整版在线观看| 国产精品久久久久久久久图文区| 亚洲高清久久久| k8久久久一区二区三区| 日韩精品一区二区三区在线播放| 亚洲男帅同性gay1069| 久久 天天综合| 欧美久久久久久久久久| 亚洲天堂中文字幕| 国产乱码精品1区2区3区| 欧美精品欧美精品系列| 亚洲精品中文在线观看| 国产乱对白刺激视频不卡| 欧美精品在线一区二区| 国产精品久久国产精麻豆99网站| 久久国内精品自在自线400部| 欧美在线观看视频一区二区三区| 亚洲国产精品激情在线观看| 美女网站在线免费欧美精品| 欧美色综合网站| 亚洲免费观看在线视频| 成人avav影音| 欧美高清在线一区| 国产在线精品一区二区| 日韩欧美国产成人一区二区| 午夜精品一区在线观看| 日韩欧美在线一区二区三区| 亚洲激情综合网| 91麻豆精品视频| 亚洲天堂免费在线观看视频| 成人sese在线| 国产精品久久久久一区| 成人爽a毛片一区二区免费| 国产日韩精品一区二区三区在线| 国内精品嫩模私拍在线| 精品久久久久久综合日本欧美| 美女视频黄久久| 日韩女优电影在线观看| 久久精品免费看| 26uuu久久天堂性欧美| 国内偷窥港台综合视频在线播放| 精品日本一线二线三线不卡|