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

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

?? part2.txt

?? Thomas課本中的verilog例子。Thomas的verilog在可編程期間領(lǐng)域很有名
?? TXT
?? 第 1 頁 / 共 2 頁
字號(hào):
/*
Copyright -c- 1996, Kluwer Academic Publishers. All Rights Reserved.

This electronic text file is distributed by Kluwer Academic Publishers with
*ABSOLUTELY NO SUPPORT* and *NO WARRANTY* from Kluwer
Academic Publishers.

Use or reproduction of the information provided in this electronic text file for
commercial gain is strictly prohibited. Explicit permission is given for the
reproduction and use of this information in an instructional setting provided
proper reference is given to the original source. Kluwer Academic Publishers
shall not be liable for damage in connection with, or arising out of, the furnishing,
performance or use of this information.


>From the Authors:
This file contains copies of the miniSim example in chapter 8, and the Verilog
modules supporting the floppy disk exercise in chapter 9 of "The Verilog
Hardware Description Language, Third Edition" by D. E. Thomas and P. R.
Moorby. The two files, good.dat and bad.dat are necessary for the floppy disk
exercise. They are in separate files.

-always
DT, PM
*/






module miniSim;
 
// element types being modeled
`define Nand 0
`define DEdgeFF 1
`define Wire 2
 
// literal values with strength:
//   format is 8 0-strength bits in decreasing strength order
//   followed by 8 1-strength bits in decreasing strength order
`define Strong0 16'b01000000_00000000
`define Strong1 16'b00000000_01000000
`define StrongX 16'b01111111_01111111
`define Pull0   16'b00100000_00000000
`define Pull1   16'b00000000_00100000
`define Highz0  16'b00000001_00000000
`define Highz1  16'b00000000_00000001
 
// three-valued logic set
`define Val0 3'd0
`define Val1 3'd1
`define ValX 3'd2
 
parameter file://set  DebugFlags to 1 for message
    DebugFlags =               'b11000,
//                               |||||
//  loading                   <--+||||
//  event value changes      <----+|||
//  wire calculation        <------+||
//  evaluation             <--------+|
//  scheduling           <-----------+
 
    IndexSize = 16,     file://maximum size for index pointers
    MaxElements = 50,   file://maximum number of elements
    TypeSize = 12;      file://maximum number of types
 
reg [IndexSize-1:0]
    eventElement,             file://output value change element
    evalElement,                file://element on fanout
    fo0Index[1:MaxElements],  file://first fanout index of eventElement
    fo1Index[1:MaxElements],  file://second fanout index of eventElement
    currentList,              file://current time scheduled event list
    nextList,                 file://unit delay scheduled event list
    schedList[1:MaxElements]; file://scheduled event list index
reg [TypeSize-1:0]
    eleType[1:MaxElements]; file://element type
reg
    fo0TermNum[1:MaxElements],   file://first fanout input terminal number
    fo1TermNum[1:MaxElements],   file://second fanout input terminal number
    schedPresent[1:MaxElements]; file://element is in scheduled event list flags
reg [15:0]
    eleStrength[1:MaxElements], file://element strength indication
    outVal[1:MaxElements],      file://element output value
    in0Val[1:MaxElements],      file://element first input value
    in1Val[1:MaxElements],      file://element second input value
    in0, in1, out, oldIn0;      file://temporary value storage
 
integer pattern, simTime; file://time keepers
 
initial
  begin
    // initialize variables
    pattern = 0;
    currentList = 0;
    nextList = 0;
 
    $display("Loading toggle circuit");
    loadElement(1, `DEdgeFF, 0, `Strong1,0,0, 4,0,0,0);
    loadElement(2, `DEdgeFF, 0, `Strong1,0,0, 3,0,0,0);
    loadElement(3, `Nand, (`Strong0|`Strong1),
        `Strong0,`Strong1,`Strong1, 4,0,1,0);
    loadElement(4, `DEdgeFF, (`Strong0|`Strong1),
        `Strong1,`Strong1,`Strong0, 3,0,1,0);
 
    // apply stimulus and simulate
    $display("Applying 2 clocks to input element 1");
    applyClock(2, 1);
    $display("Changing element 2 to value 0 and applying 1 clock");
    setupStim(2, `Strong0);
    applyClock(1, 1);
 
    $display("\nLoading open-collector and pullup circuit");
    loadElement(1, `DEdgeFF, 0, `Strong1,0,0, 3,0,0,0);
    loadElement(2, `DEdgeFF, 0, `Strong0,0,0, 4,0,0,0);
    loadElement(3, `Nand, (`Strong0|`Highz1),
        `Strong0,`Strong1,`Strong1, 5,0,0,0);
    loadElement(4, `Nand, (`Strong0|`Highz1),
        `Highz1,`Strong0,`Strong1, 5,0,1,0);
    loadElement(5, `Wire, 0,
        `Strong0,`Strong0,`Highz1, 7,0,1,0);
    loadElement(6, `DEdgeFF, 0, `Pull1,0,0, 7,0,0,0);
    loadElement(7, `Wire, 0,
        `Strong0,`Pull1,`Strong0, 0,0,0,0);
 
    // apply stimulus and simulate
    $display("Changing element 1 to value 0");
    pattern = pattern + 1;
    setupStim(1, `Strong0);
    executeEvents;
    $display("Changing element 2 to value 1");
    pattern = pattern + 1;
    setupStim(2, `Strong1);
    executeEvents;
    $display("Changing element 2 to value X");
    pattern = pattern + 1;
    setupStim(2, `StrongX);
    executeEvents;
  end
 
// Initialize data structure for a given element.
task loadElement;
input [IndexSize-1:0] loadAtIndex; file://element index being loaded
input [TypeSize-1:0] type;         file://type of element
input [15:0] strengthCoercion;     file://strength specification of element
input [15:0] oVal, i0Val, i1Val;   file://output and input values
input [IndexSize-1:0] fo0, fo1;    file://fanout element indexes
input fo0Term, fo1Term;            file://fanout element input terminal indicators
  begin
    if (DebugFlags[4])
        $display(
            "Loading element %0d, type %0s, with initial value %s(%b_%b)",
            loadAtIndex, typeString(type),
            valString(oVal), oVal[15:8], oVal[7:0]);
    eleType[loadAtIndex] = type;
    eleStrength[loadAtIndex] = strengthCoercion;
    outVal[loadAtIndex] = oVal;
    in0Val[loadAtIndex] = i0Val;
    in1Val[loadAtIndex] = i1Val;
    fo0Index[loadAtIndex] = fo0;
    fo1Index[loadAtIndex] = fo1;
    fo0TermNum[loadAtIndex] = fo0Term;
    fo1TermNum[loadAtIndex] = fo1Term;
    schedPresent[loadAtIndex] = 0;
  end
endtask
 
// Given a type number, return a type string
function [32*8:1] typeString;
input [TypeSize-1:0] type;
    case (type)
      `Nand: typeString = "Nand";
      `DEdgeFF: typeString = "DEdgeFF";
      `Wire: typeString = "Wire";
      default: typeString = "*** Unknown element type";
    endcase
endfunction
 
// Setup a value change on an element.
task setupStim;
input [IndexSize-1:0] vcElement; file://element index
input [15:0] newVal;           file://new element value
  begin
    if (! schedPresent[vcElement])
      begin
        schedList[vcElement] = currentList;
        currentList = vcElement;
        schedPresent[vcElement] = 1;
      end
    outVal[vcElement] = newVal;
  end
endtask
 
// Setup and simulate a given number of clock pulses to a given element.
task applyClock;
input [7:0] nClocks;
input [IndexSize-1:0] vcElement;
    repeat(nClocks)
      begin
        pattern = pattern + 1;
        setupStim(vcElement, `Strong0);
        executeEvents;
        pattern = pattern + 1;
        setupStim(vcElement, `Strong1);
        executeEvents;
      end
endtask
 
// Execute all events in the current event list.
// Then move the events in the next event list to the current event
// list and loop back to execute these events. Continue this loop
// until no more events to execute.
// For each event executed, evaluate the two fanout elements if present.
task executeEvents;
reg [15:0] newVal;
  begin
    simTime = 0;
    while (currentList)
      begin
        eventElement = currentList;
        currentList = schedList[eventElement];
        schedPresent[eventElement] = 0;
        newVal = outVal[eventElement];
        if (DebugFlags[3])
            $display(
                "At %0d,%0d Element %0d, type %0s, changes to %s(%b_%b)",
                pattern, simTime,
                eventElement, typeString(eleType[eventElement]),
                valString(newVal), newVal[15:8], newVal[7:0]);
        if (fo0Index[eventElement]) evalFo(0);
        if (fo1Index[eventElement]) evalFo(1);
        if (! currentList) // if empty move to next time unit
          begin
            currentList = nextList;
            nextList = 0;
            simTime = simTime + 1;
          end
      end
  end
endtask
 
// Evaluate a fanout element by testing its type and calling the
// appropriate evaluation routine.
task evalFo;
input fanout; file://first or second fanout indicator
  begin
    evalElement = fanout ? fo1Index[eventElement] :
                           fo0Index[eventElement];
    if (DebugFlags[1])
        $display("Evaluating Element %0d type is %0s",
            evalElement, typeString(eleType[evalElement]));
    case (eleType[evalElement])
      `Nand: evalNand(fanout);
      `DEdgeFF: evalDEdgeFF(fanout);
      `Wire: evalWire(fanout);
    endcase
  end
endtask
 
// Store output value of event element into
// input value of evaluation element.
task storeInVal;
input fanout; file://first or second fanout indicator
  begin
    // store new input value
    if (fanout ? fo1TermNum[eventElement] : fo0TermNum[eventElement])
        in1Val[evalElement] = outVal[eventElement];
    else
        in0Val[evalElement] = outVal[eventElement];
  end
endtask
 
// Convert a given full strength value to three-valued logic (0, 1 or X)
function [1:0] log3;
input [15:0] inVal;
    casez (inVal)
      16'b00000000_00000000: log3 = `ValX;
      16'b???????0_00000000: log3 = `Val0;
      16'b00000000_???????0: log3 = `Val1;
      default:               log3 = `ValX;
    endcase
endfunction
 
// Convert a given full strength value to four-valued logic (0, 1, X or Z),
// returning a 1 character string
function [8:1] valString;
input [15:0] inVal;
    case (log3(inVal))
      `Val0: valString = "0";
      `Val1: valString = "1";
      `ValX: valString = (inVal & 16'b11111110_11111110) ? "X" : "Z";
    endcase
endfunction
 
// Coerce a three-valued logic output value to a full output strength value
// for the scheduling of the evaluation element
function [15:0] strengthVal;
input [1:0] logVal;
    case (logVal)
      `Val0: strengthVal = eleStrength[evalElement] & 16'b11111111_00000000;
      `Val1: strengthVal = eleStrength[evalElement] & 16'b00000000_11111111;
      `ValX: strengthVal = fillBits(eleStrength[evalElement]);
    endcase
endfunction
 
// Given an incomplete strength value, fill the missing strength bits.
// The filling is only necessary when the value is unknown.
function [15:0] fillBits;
input [15:0] val;
  begin
    fillBits = val;
    if (log3(val) == `ValX)
      begin
        casez (val)
  16'b1???????_????????: fillBits = fillBits | 16'b11111111_00000001;
  16'b01??????_????????: fillBits = fillBits | 16'b01111111_00000001;
  16'b001?????_????????: fillBits = fillBits | 16'b00111111_00000001;
  16'b0001????_????????: fillBits = fillBits | 16'b00011111_00000001;
  16'b00001???_????????: fillBits = fillBits | 16'b00001111_00000001;
  16'b000001??_????????: fillBits = fillBits | 16'b00000111_00000001;
  16'b0000001?_????????: fillBits = fillBits | 16'b00000011_00000001;
        endcase
        casez (val)
  16'b????????_1???????: fillBits = fillBits | 16'b00000001_11111111;
  16'b????????_01??????: fillBits = fillBits | 16'b00000001_01111111;
  16'b????????_001?????: fillBits = fillBits | 16'b00000001_00111111;
  16'b????????_0001????: fillBits = fillBits | 16'b00000001_00011111;
  16'b????????_00001???: fillBits = fillBits | 16'b00000001_00001111;
  16'b????????_000001??: fillBits = fillBits | 16'b00000001_00000111;
  16'b????????_0000001?: fillBits = fillBits | 16'b00000001_00000011;
       endcase
     end
  end
endfunction
 
// Evaluate a 'Nand' gate primitive.
task evalNand;
input fanout; file://first or second fanout indicator
  begin
    storeInVal(fanout);
    // calculate new output value
    in0 = log3(in0Val[evalElement]);
    in1 = log3(in1Val[evalElement]);
    out = ((in0 == `Val0) || (in1 == `Val0)) ?
        strengthVal(`Val1) :
        ((in0 == `ValX) || (in1 == `ValX)) ?
            strengthVal(`ValX):
            strengthVal(`Val0);
    // schedule if output value is different
    if (out != outVal[evalElement])
        schedule(out);
  end
endtask
 
// Evaluate a D positive edge-triggered flip flop
task evalDEdgeFF;
input fanout; file://first or second fanout indicator
    // check value change is on clock input
    if (fanout ? (fo1TermNum[eventElement] == 0) :
                 (fo0TermNum[eventElement] == 0))
      begin
        // get old clock value
        oldIn0 = log3(in0Val[evalElement]);
        storeInVal(fanout);
        in0 = log3(in0Val[evalElement]);
        // test for positive edge on clock input
        if ((oldIn0 == `Val0) && (in0 == `Val1))
          begin
            out = strengthVal(log3(in1Val[evalElement]));
            if (out != outVal[evalElement])
              schedule(out);
          end
      end
    else
        storeInVal(fanout); // store data input value
endtask
 
// Evaluate a wire with full strength values
task evalWire;
input fanout;
reg [7:0] mask;
  begin
    storeInVal(fanout);
 
    in0 = in0Val[evalElement];
    in1 = in1Val[evalElement];
    mask = getMask(in0[15:8]) & getMask(in0[7:0]) &
           getMask(in1[15:8]) & getMask(in1[7:0]);
    out = fillBits((in0 | in1) & {mask, mask});
 
    if (out != outVal[evalElement])
        schedule(out);
 
    if (DebugFlags[2])
        $display("in0 = %b_%b\nin1 = %b_%b\nmask= %b %b\nout = %b_%b",
            in0[15:8],in0[7:0], in1[15:8],in1[7:0],
            mask,mask, out[15:8],out[7:0]);
  end
endtask
 
// Given either a 0-strength or 1-strength half of a strength value
// return a masking pattern for use in a wire evaluation.
function [7:0] getMask;
input [7:0] halfVal; file://half a full strength value
    casez (halfVal)
      8'b???????1: getMask = 8'b11111111;
      8'b??????10: getMask = 8'b11111110;
      8'b?????100: getMask = 8'b11111100;
      8'b????1000: getMask = 8'b11111000;
      8'b???10000: getMask = 8'b11110000;
      8'b??100000: getMask = 8'b11100000;
      8'b?1000000: getMask = 8'b11000000;
      8'b10000000: getMask = 8'b10000000;
      8'b00000000: getMask = 8'b11111111;
    endcase
endfunction
 
// Schedule the evaluation element to change to a new value.
// If the element is already scheduled then just insert the new value.
task schedule;
input [15:0] newVal; // new value to change to
  begin
    if (DebugFlags[0])
        $display(
            "Element %0d, type %0s, scheduled to change to %s(%b_%b)",
            evalElement, typeString(eleType[evalElement]),
            valString(newVal), newVal[15:8], newVal[7:0]);
    if (! schedPresent[evalElement])
      begin
        schedList[evalElement] = nextList;
schedPresent[evalElement] = 1;
        nextList = evalElement;
      end
    outVal[evalElement] = newVal;
  end
endtask
endmodule
file://example 8.1


//  simulation interface module
//  by Tom Martin, February, 1995 
//  for 18-360 project 1.
//  
//  This module should be listed first on the command line, so that
//  the timescale directive will apply to all other modules, i.e.,
//  verilog simint.v blah1.v blah2.v blah3.v
//  
//  I think the simulator will die if the timescale directive is not
//  in the first module, but is in later ones.

`timescale      10 ns/1 ns
  
module simint(go, count, done, err);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久超级碰视频| 午夜伊人狠狠久久| 91麻豆.com| 日韩中文字幕av电影| 国产欧美日本一区视频| 欧美三级电影精品| 懂色一区二区三区免费观看 | 欧美大片日本大片免费观看| 精品va天堂亚洲国产| 欧美日韩一区二区欧美激情| 成人免费视频视频| 久久99深爱久久99精品| 亚洲国产精品久久人人爱| 国产精品欧美一区二区三区| 国产一区二区三区免费播放| 国产精品久久久久久久久动漫 | 欧美日韩高清不卡| 老司机免费视频一区二区| 亚洲一区二区三区四区五区中文 | 51精品国自产在线| aaa欧美日韩| 色婷婷综合久久久久中文 | 日本一区二区视频在线观看| 国产精品视频在线看| 国产精品久久久久久一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟| 日韩毛片精品高清免费| 亚洲一区日韩精品中文字幕| 日韩电影一区二区三区四区| 韩国av一区二区三区四区| 懂色av中文一区二区三区| 成人免费福利片| 色呦呦一区二区三区| 在线播放91灌醉迷j高跟美女| 欧美一区二区福利在线| 国产欧美精品一区aⅴ影院| 亚洲人成在线播放网站岛国 | 在线精品视频免费观看| 欧美一区二区不卡视频| 欧美国产丝袜视频| 亚洲影院久久精品| 国内成人精品2018免费看| 国产91色综合久久免费分享| av成人动漫在线观看| 欧美日韩激情在线| 国产色91在线| 亚洲高清视频中文字幕| 国产精品伊人色| 91蝌蚪porny| 精品三级av在线| 亚洲狼人国产精品| 国产麻豆欧美日韩一区| 欧美性猛交xxxxxx富婆| 国产色产综合产在线视频| 亚洲尤物视频在线| 精品中文字幕一区二区小辣椒| 粉嫩欧美一区二区三区高清影视 | 日韩视频国产视频| 亚洲欧洲www| 久久电影网电视剧免费观看| 色呦呦网站一区| 欧美激情一区二区三区| 免费久久精品视频| 色综合久久66| 国产偷国产偷精品高清尤物| 天使萌一区二区三区免费观看| 国产一区在线看| 欧美日韩免费在线视频| 欧美激情一区二区三区蜜桃视频| 日本视频一区二区| 在线看日韩精品电影| 久久蜜桃一区二区| 青娱乐精品视频| 精品视频999| 国产一区二区三区免费在线观看| 69堂精品视频| 亚洲小说春色综合另类电影| 国产一区二区精品久久99| 欧美久久一二区| 亚洲综合999| hitomi一区二区三区精品| 久久毛片高清国产| 久久狠狠亚洲综合| 在线播放视频一区| 中文字幕亚洲不卡| 国产精品一区三区| 日韩精品一区二区三区视频在线观看| 亚洲在线观看免费视频| aaa亚洲精品一二三区| 国产精品欧美一区二区三区| 久久福利视频一区二区| 日韩精品一区二区三区中文精品| 亚洲成人免费视频| 欧美在线免费观看亚洲| 亚洲精品视频在线看| 99re热这里只有精品免费视频| 精品国内二区三区| 青娱乐精品视频| 日韩精品一区二区三区蜜臀| 日韩精品乱码av一区二区| 欧美日韩国产综合久久| 亚洲国产综合视频在线观看| 91成人国产精品| 亚洲综合色丁香婷婷六月图片| 99精品偷自拍| 亚洲欧美影音先锋| 色天天综合久久久久综合片| 一区二区三区美女| 欧美亚洲另类激情小说| 亚洲国产日韩一级| 精品视频1区2区3区| 午夜欧美一区二区三区在线播放| 欧美日韩和欧美的一区二区| 亚洲成人精品一区二区| 337p亚洲精品色噜噜噜| 一区二区不卡在线播放| 欧美日本视频在线| 日韩成人一级片| 日韩欧美中文字幕公布| 国产在线精品不卡| 国产精品乱人伦一区二区| 91麻豆自制传媒国产之光| 亚洲一区在线观看视频| 欧美精品1区2区3区| 国产综合一区二区| 久久精品亚洲国产奇米99| caoporn国产精品| 亚洲国产精品人人做人人爽| 91精品麻豆日日躁夜夜躁| 狠狠久久亚洲欧美| 久久精品欧美日韩| 99久久综合色| 日韩av二区在线播放| 精品久久久久久亚洲综合网| 成人18视频在线播放| 亚洲自拍偷拍图区| 欧美mv日韩mv亚洲| 99久久久久久99| 日韩国产一区二| 国产女人aaa级久久久级| 在线欧美日韩精品| 亚欧色一区w666天堂| 制服丝袜av成人在线看| 国产毛片精品国产一区二区三区| 国产精品人人做人人爽人人添| 在线视频综合导航| 国产在线精品免费| 一区二区三区中文免费| 日韩欧美一区电影| 99久久精品国产观看| 免费观看日韩av| 自拍视频在线观看一区二区| 日韩三级伦理片妻子的秘密按摩| a在线播放不卡| 亚洲成av人在线观看| 国产亚洲欧洲一区高清在线观看| 成人性生交大片免费看在线播放| 亚洲国产欧美在线人成| 久久久亚洲综合| 欧美性一二三区| 国产自产视频一区二区三区 | 波多野结衣在线一区| 亚洲午夜免费福利视频| 国产日产欧美一区| 欧美一区二区视频网站| 99精品欧美一区二区三区小说| 日一区二区三区| 亚洲视频香蕉人妖| 精品国产乱码久久久久久免费| 91一区二区在线| 国产精品99久久久| 日韩二区三区在线观看| 中文字幕一区二区三区不卡在线 | 欧美日韩电影在线| 国产一区二区主播在线| 尤物视频一区二区| 中文字幕欧美三区| 精品国产一区二区国模嫣然| 欧美系列在线观看| 91丨九色丨黑人外教| 经典三级一区二区| 日韩精品色哟哟| 亚洲成人777| 亚洲与欧洲av电影| 亚洲理论在线观看| 国产精品污污网站在线观看| 欧美人与禽zozo性伦| a4yy欧美一区二区三区| 国产精品12区| 国内精品第一页| 美日韩一区二区| 日本亚洲天堂网| 五月天视频一区| 亚洲国产日产av| 亚洲 欧美综合在线网络| 亚洲美女免费在线| 1区2区3区精品视频| 中文字幕一区视频| 国产精品护士白丝一区av| 精品国精品国产|