⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addac.v

📁 some example for verilog design
💻 V
字号:
//Implicit style addition by bit serial//copyright 1997 Mark Arnold//all rights reserved//need to use following for simulation with VeriWell`define CLK @(posedge sysclk)`define ENS #1//need to use following for synthesis by Synopsys://`define CLK//`define ENS`define NUM_SYS_BITS   4module vsyadd1(pb,ready,x,y,r1,r2,reset,sysclk);  input pb;  input [`NUM_SYS_BITS-1:0] x,y;  input reset,sysclk;  output ready;  output [`NUM_SYS_BITS-1:0] r1,r2;  wire reset,sysclk;  wire pb;  wire [`NUM_SYS_BITS-1:0] x,y;  reg ready;  reg [`NUM_SYS_BITS-1:0] r1,r2,r3;  reg c;  function car;    input a,b,c;    begin      car = a&b|a&c|b&c;    end  endfunction  function sum;    input a,b,c;    begin      sum = a+b+c;    end  endfunction  always    begin        ready <= `CLK 1;      @(posedge sysclk) `ENS;        r2 <= `CLK y;        r3 <= `CLK 1;        c <= `CLK 0;        if (pb)          begin              ready <= @(posedge sysclk) 0;            @(posedge sysclk)`ENS;              r1 <= `CLK x;              while (~r3[`NUM_SYS_BITS-1])                begin                  @(posedge sysclk) `ENS;                    r1 <= `CLK {sum(r1[0],r2[0],c),r1[`NUM_SYS_BITS-1:1]};                    c  <= `CLK car(r1[0],r2[0],c);                    r2 <= `CLK r2 >> 1;                    r3 <= `CLK r3 << 1;                end          end    endendmodulemodule debounce(sw3,pb,cnt,sysclk,reset);  input sw3,sysclk,reset;  output pb;  output [19:0] cnt;  wire sw3,sysclk,reset;  reg pb;  reg [19:0] cnt;    always    begin      @(posedge sysclk) `ENS;        pb <= `CLK 0;        if (sw3 == 1)          cnt <= `CLK 20'hfffff;        else          while (cnt[19:1] != 0)            begin              @(posedge sysclk) `ENS;                if (sw3 == 0)                  cnt <= `CLK cnt - 1;                if (cnt[19:1] == 0)                  pb <= `CLK 1;            end    endendmodulemodule mach445(sw3,sw2,sw1,sw0,sysclk,reset,             a1,b1,c1,d1,e1,f1,g1      //       a2,b2,c2,d2,e2,f2,g2             );  input sw3,sw2,sw1,sw0,sysclk,reset;  output a1,b1,c1,d1,e1,f1,g1;//  output a2,b2,c2,d2,e2,f2,g2;  wire sw3,sw2,sw1,sw0,sysclk,reset;  reg a1,b1,c1,d1,e1,f1,g1;//  reg a2,b2,c2,d2,e2,f2,g2;//  row1 .a.//  row2 f.b//  row3 .g.//  row4 e.c//  row5 .d.  function [7:0] seven_seg;    input [3:0] i;    reg [2:0] row1,row2,row3,row4,row5;    reg a1,b,c,d1,e,f,g1;    begin      case (i)        0: begin             row1 = 3'b111;             row2 = 3'b101;             row3 = 3'b101;             row4 = 3'b101;             row5 = 3'b111;           end        1: begin             row1 = 3'b001;             row2 = 3'b001;             row3 = 3'b001;             row4 = 3'b001;             row5 = 3'b001;           end        2: begin             row1 = 3'b111;             row2 = 3'b001;             row3 = 3'b111;             row4 = 3'b100;             row5 = 3'b111;           end        3: begin             row1 = 3'b111;             row2 = 3'b001;             row3 = 3'b111;             row4 = 3'b001;             row5 = 3'b111;           end        4: begin             row1 = 3'b101;             row2 = 3'b101;             row3 = 3'b111;             row4 = 3'b001;             row5 = 3'b001;           end        5: begin             row1 = 3'b111;             row2 = 3'b100;             row3 = 3'b111;             row4 = 3'b001;             row5 = 3'b111;           end        6: begin             row1 = 3'b111;             row2 = 3'b100;             row3 = 3'b111;             row4 = 3'b101;             row5 = 3'b111;           end        7: begin             row1 = 3'b111;             row2 = 3'b001;             row3 = 3'b001;             row4 = 3'b001;             row5 = 3'b001;           end        8: begin             row1 = 3'b111;             row2 = 3'b101;             row3 = 3'b111;             row4 = 3'b101;             row5 = 3'b111;           end        9: begin             row1 = 3'b111;             row2 = 3'b101;             row3 = 3'b111;             row4 = 3'b001;             row5 = 3'b001;           end        4'ha: begin             row1 = 3'b111;             row2 = 3'b101;             row3 = 3'b111;             row4 = 3'b101;             row5 = 3'b101;           end        4'hb: begin             row1 = 3'b100;             row2 = 3'b100;             row3 = 3'b111;             row4 = 3'b101;             row5 = 3'b111;           end        4'hc: begin             row1 = 3'b111;             row2 = 3'b100;             row3 = 3'b100;             row4 = 3'b100;             row5 = 3'b111;           end        4'hd: begin             row1 = 3'b001;             row2 = 3'b001;             row3 = 3'b111;             row4 = 3'b101;             row5 = 3'b111;           end        4'he: begin             row1 = 3'b111;             row2 = 3'b100;             row3 = 3'b111;             row4 = 3'b100;             row5 = 3'b111;           end        4'hf: begin             row1 = 3'b111;             row2 = 3'b100;             row3 = 3'b111;             row4 = 3'b100;             row5 = 3'b100;           end        default:            begin             row1 = 3'b000;             row2 = 3'b000;             row3 = 3'b000;             row4 = 3'b000;             row5 = 3'b000;           end      endcase      a1 = row1[1];      b = row2[0];      f = row2[2];      g1 = row3[1];      c = row4[0];      e = row4[2];      d1 = row5[1];      seven_seg = {a1,b,c,d1,e,f,g1};    end  endfunction  wire ready;  wire [3:0] r1,r2;  reg [3:0] y;  wire pb;  wire [19:0] cnt;  vsyadd1 v1(pb,ready,r1,y,r1,r2,reset,sysclk);  debounce deb1(sw3,pb,cnt,sysclk,reset);  always @(sw2 or sw1 or sw0)    y = {sw2,sw1,sw0};  always @(r1)    {a1,b1,c1,d1,e1,f1,g1} = ~seven_seg(r1);//  always @(r2)//    {a2,b2,c2,d2,e2,f2,g2} = ~seven_seg(r2);endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -