3109|1

2804

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

【我给xilinx资源中心做贡献】大量的verilog源代码 [复制链接]

大量的verilog源代码

Verilog HDL 程序举例
一,基本组合逻辑功能:
双向管脚(clocked bidirectional pin)
Verilog HDL: Bidirectional Pin

This example implements a clocked bidirectional pin in Verilog HDL.
The value of OE determines whether bidir is an input, feeding in inp, or a tri-state, driving out the value b.


bidir.v

module bidirec (oe, clk, inp, outp, bidir);

// Port Declaration

input  oe;
input  clk;
input  [7:0] inp;
output [7:0] outp;
inout  [7:0] bidir;

reg   [7:0] a;
reg   [7:0] b;

assign bidir = oe ? a : 8'bZ ;
assign outp = b;

// Always Construct

always @ (posedge clk)
begin
    b <= bidir;
    a <= inp;
end

endmodule


多路选择器(MUX)
//
//-----------------------------------------------------------------------------------
// DESCRIPTION  : Multiplexer
//         Code style: used case statement
//         Width of output terminal: 8
//         Number of terminals: 4
//         Output enable active: HIGH
//         Output value of all bits when enable not active: 0

//-----------------------------------------------------------------------------------



module mux(EN ,IN0 ,IN1 ,IN2 ,IN3 ,SEL ,OUT );

    input EN ;
    input [7:0] IN0 ,IN1 ,IN2 ,IN3 ;
    input [1:0] SEL ;

    output [7:0] OUT ;
    reg [7:0] OUT ;


    always @(SEL or EN or IN0 or IN1 or IN2 or IN3 )
    begin
        if (EN == 0) OUT = {8{1&#39;b0}};
        else
            case (SEL )
                0 : OUT = IN0 ;
                1 : OUT = IN1 ;
                2 : OUT = IN2 ;
                3 : OUT = IN3 ;
                default : OUT = {8{1&#39;b0}};
            endcase
    end

endmodule

二进制到BCD码转换
//
//
//-----------------------------------------------------------------------------------
// DESCRIPTION  : Bin to Bcd converter
//         Input (data_in) width : 4
//         Output (data_out) width : 8
//         Enable (EN) active : high
//-----------------------------------------------------------------------------------



module bin2bcd (data_in ,EN ,data_out );

input [3:0] data_in ;
input EN ;
output [7:0] data_out ;
reg [7:0] data_out ;



    always @(data_in or EN )
    begin
        data_out = {8{1&#39;b0}};
        if (EN == 1)
        begin
            case (data_in [3:1])
                3&#39;b000 : data_out [7:1] = 7&#39;b0000000;
                3&#39;b001 : data_out [7:1] = 7&#39;b0000001;
                3&#39;b010 : data_out [7:1] = 7&#39;b0000010;
                3&#39;b011 : data_out [7:1] = 7&#39;b0000011;
                3&#39;b100 : data_out [7:1] = 7&#39;b0000100;
                3&#39;b101 : data_out [7:1] = 7&#39;b0001000;
                3&#39;b110 : data_out [7:1] = 7&#39;b0001001;
                3&#39;b111 : data_out [7:1] = 7&#39;b0001010;
                default : data_out [7:1] = {7{1&#39;b0}};
            endcase
            data_out [0] = data_in [0];
        end
    end

endmodule

二进制到格雷码转换
//-----------------------------------------------------------------------------------
// DESCRIPTION  : Bin to gray converter
//         Input (DATA_IN) width : 4
//         Enable (EN) active : high

//-----------------------------------------------------------------------------------


module BIN2GARY (EN ,DATA_IN ,DATA_OUT );

    input EN ;

    input [3:0] DATA_IN ;

    output [3:0] DATA_OUT ;

    assign DATA_OUT [0] = (DATA_IN [0] ^ DATA_IN [1] ) && EN ;
    assign DATA_OUT [1] = (DATA_IN [1] ^ DATA_IN [2] ) && EN ;
    assign DATA_OUT [2] = (DATA_IN [2] ^ DATA_IN [3] ) && EN ;
    assign DATA_OUT [3] = DATA_IN [3] && EN ;
endmodule


7段译码器

//-----------------------------------------------------------------------------------
// DESCRIPTION  :  BIN to seven segments converter
//          segment encoding
//            a
//           +---+
//          f |  | b
//           +---+ <- g
//          e |  | c
//           +---+
//            d
//         Enable (EN) active        : high
//         Outputs (data_out) active     : low
//-----------------------------------------------------------------------------------



module bin27seg (data_in ,EN ,data_out );

    input [3:0] data_in ;

    input EN ;

    output [6:0] data_out ;
    reg [6:0] data_out ;


    always @(data_in or EN )
    begin
        data_out = 7&#39;b1111111;
        if (EN == 1)
            case (data_in )
                4&#39;b0000: data_out = 7&#39;b1000000; // 0
                4&#39;b0001: data_out = 7&#39;b1111001; // 1
                4&#39;b0010: data_out = 7&#39;b0100100; // 2
                4&#39;b0011: data_out = 7&#39;b0110000; // 3
                4&#39;b0100: data_out = 7&#39;b0011001; // 4
                4&#39;b0101: data_out = 7&#39;b0010010; // 5
                4&#39;b0110: data_out = 7&#39;b0000011; // 6
                4&#39;b0111: data_out = 7&#39;b1111000; // 7
                4&#39;b1000: data_out = 7&#39;b0000000; // 8
                4&#39;b1001: data_out = 7&#39;b0011000; // 9
                4&#39;b1010: data_out = 7&#39;b0001000; // A
                4&#39;b1011: data_out = 7&#39;b0000011; // b
                4&#39;b1100: data_out = 7&#39;b0100111; // c
                4&#39;b1101: data_out = 7&#39;b0100001; // d
                4&#39;b1110: data_out = 7&#39;b0000110; // E
                4&#39;b1111: data_out = 7&#39;b0001110; // F
                default: data_out = 7&#39;b1111111;
            endcase
    end

endmodule




二,基本时序逻辑功能:
8位数据锁存器
//
//
//-----------------------------------------------------------------------------------
// DESCRIPTION  : Flip-flop D type
//         Width : 8
//         CLK active : high
//         CLR active : high
//         CLR type : synchronous
//         SET active : high
//         SET type : synchronous
//         LOAD active : high
//         CE active : high
//-----------------------------------------------------------------------------------


module ffd (CLR , SET , CE , LOAD , DATA_IN , DATA_OUT , CLK );
input CLR , SET , CE , LOAD , CLK ;
input [7:0] DATA_IN ;
output [7:0] DATA_OUT ;


reg [7:0] DATA_OUT_TEMP;

    always @(posedge CLK )
    begin
        if (CE == 1&#39;b1)
            if (CLR == 1&#39;b1)
                DATA_OUT_TEMP = {8{1&#39;b0}};
            else if (SET == 1&#39;b1)
                DATA_OUT_TEMP = {8{1&#39;b1}};
            else if (LOAD == 1&#39;b1)
                DATA_OUT_TEMP = DATA_IN ;
    end

    assign DATA_OUT = DATA_OUT_TEMP;

endmodule


移位寄存器
//-----------------------------------------------------------------------------------
// DESCRIPTION  : Shift register
//         Type : univ
//         Width : 4
//         Shift direction: right/left (right active high)
//
//         CLK active : high
//         CLR active : high
//         CLR type : synchronous
//         SET active : high
//         SET type : synchronous
//         LOAD active : high
//         CE active : high
//         SERIAL input : SI
//-----------------------------------------------------------------------------------


module shft_reg (CLR , SET , DIR , CE , LOAD , DATA , SI , data_out , CLK );
input CLR , SET , CE , LOAD , DIR , SI , CLK ;
input [3:0] DATA ;
output [3:0] data_out ;



reg [3:0] TEMP;

    always @(posedge CLK )
    begin
        if (CE == 1&#39;b1)
            if (CLR == 1&#39;b1)
                TEMP = {4{1&#39;b0}};
            else if (SET == 1&#39;b1)
                TEMP = {4{1&#39;b1}};
            else if (LOAD == 1&#39;b1)
                TEMP = DATA ;
            else if (DIR == 1&#39;b1)
                TEMP = {SI , TEMP [3:1]};
            else
                TEMP = {TEMP [2:0], SI };
    end

    assign data_out = TEMP;
endmodule


三,基本语法,元件例化与层次设计:
Verilog HDL: Creating a Hierarchical Design

This example describes how to create a hierarchical design using Verilog HDL.
The file top_ver.v is the top level, which calls the two lower level files bottom1.v and bottom2.v.



vprim.v



top_ver.v

module top_ver (q, p, r, out);

input   q, p, r;
output   out;
reg   out, intsig;

bottom1 u1(.a(q), .b(p), .c(intsig));
bottom2 u2(.l(intsig), .m(r), .n(out));

endmodule


--------------------------------------------------------------------------------

bottom1.v

module bottom1(a, b, c);

input   a, b;
output   c;
reg   c;

always
begin
   c<=a & b;
end

endmodule


--------------------------------------------------------------------------------

bottom2.v

module bottom2(l, m, n);

input   l, m;
output  n;
reg    n;

always
begin
   n<=l | m;
end
endmodule




四,状态机举例:
同步状态机
Verilog HDL: Synchronous State Machine

statem.v

module statem(clk, in, reset, out);

input clk, in, reset;
output [3:0] out;

reg [3:0] out;
reg [1:0] state;

parameter zero=0, one=1, two=2, three=3;

always @(state)
   begin
     case (state)
        zero:
          out = 4&#39;b0000;
        one:
          out = 4&#39;b0001;
        two:
          out = 4&#39;b0010;
        three:
          out = 4&#39;b0100;
        default:
          out = 4&#39;b0000;
     endcase
   end

always @(posedge clk or posedge reset)
   begin
     if (reset)
        state = zero;
     else
        case (state)
          zero:
             state = one;
          one:
             if (in)
               state = zero;
             else
               state = two;
          two:
             state = three;
          three:
             state = zero;
        endcase
   end

endmodule

此帖出自FPGA/CPLD论坛

最新回复

基础知识不容错过!  详情 回复 发表于 2011-6-25 20:27
点赞 关注
个人签名QQ:1625345502
 

回复
举报

6892

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

基础知识不容错过!

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表