zoukankan      html  css  js  c++  java
  • Verilog函数调用时使用wire的小问题

     

    前言:wire,assign,reg本来就是verilog中很容易搞混的东西,我就在下面说说我的理解。

    一直都没有搞懂verilog里面的wire的作用,一直都没怎么用到,所以也就是混着混着过着。最近在做自己毕业设计,要用到Verilog,所以又把这些东西捡起来,今年在写一段程序时,在两个模块之间连线的时候出现了问题,在网上找到一个程序,仔细研究了下顶层,终于把这个东西看明白了。故贴出来和大家分享,也是个人理解,刚刚上手,欢迎大家交流。

    大家先看看下面这段代码:

     1 module top
     2 {
     3 ////////////////////    Clock Input         ////////////////////     
     4         clk_50,                            //    50 MHz
     5 ////////////////////    Reset             ////////////////////
     6         reset,
     7 ////////////////////    en                ////////////////////
     8         en,
     9 ////////////////////    selecet          ////////////////////
    10         wave1,
    11         wave2,
    12         wave3,        
    13 }
    14 
    15 
    16 input                     clk_50;
    17 input                     reset;
    18 output                    en;
    19 output            [7:0]        fword;                        //frequancy
    20 output                    wave1;                        //zheng            
    21 output                    wave2;                        //sanjiao
    22 output                    wave3;                        //juchibo
    23 
    24 wire                    sine_en;
    25 wire                    tri_en;
    26 wire                    too_en;
    27 
    28 nios                    u0
    29 {
    30                   .clk(clk_50),
    31               .reset_n(reset),
    32           .out_port_from_the_en(en),
    33           .out_port_from_the_fword(fword),
    34           .out_port_from_the_pio_1(sine_en),
    35           .out_port_from_the_pio_2(tri_en),
    36           .out_port_from_the_pio_3(too_en)
    37 }
    38 
    39 test_sine                 u1
    40 {
    41             .clk(clk_50),
    42             .reset(reset),
    43             .en(sine_en)
    44 }
    45  endmodule

    还有这张图片,这是元件在QuartusII中被做成symbol后的图片

    对照程序看,这里就比较明白了。

    程序24行  wire     sine_en;

          34行 .out_port_from_the_pio_1(sine_en),

          43行 .en(sine_en)

    这三句句就是图中那根连接out_port_from_pio_1和en的之间的连线。24行定义这条导线,在34行调用这导线的一端,在43行调用导线的另一端,这样就把一根线连了起来。

    下面还有assign的赋值大致有两种:

    一种是直接赋值,assign    DRAM_DQ        =    16'hffff;

    这样就相当于给DRAM_DQ这个16位的数据赋值为0xFFFF。这样就和单片机C语言中的全局量赋值一个道理。

    还有一种是类型转换。 如:assign I2C_SCLK  =   I2C_SCLKm;

    这句就相当于是把I2C_SCLK和I2C_SCLKm等同起来;I2C_SCLK定义的是output,而I2C_SCLKm则是wire,这样就好像C语言的类型转换吧。

    说着说着感觉有点乱了。。。我去在搞搞明白。明天一定把这东西完成。

  • 相关阅读:
    nefu 628 Garden visiting
    codeforces 814 C. An impassioned circulation of affection 【尺取法 or DP】
    bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)
    Codeforces Round #423 (Div. 2)
    hdu 5955 Guessing the Dice Roll 【AC自动机+高斯消元】
    poj1322 Chocolate 【 概率DP 】
    poj 3414 Pots 【BFS+记录路径 】
    hdu5194 DZY Loves Balls 【概率论 or 搜索】
    51nod 1515 明辨是非 [并查集+set]
    hdu 1175 连连看 [DFS]
  • 原文地址:https://www.cnblogs.com/zhongnanshan/p/1420172.html
Copyright © 2011-2022 走看看