Xilinx FPGA 零基础系列(0) 半加器的三种写法,以及一些重要的可以直接应用的语法知识

`timescale 1ns / 1ps   //时间单位/时间精度
///*
//c与verilog最大的区别:c是串行,verilog是并行,由逻辑门构成

//综合的目的:将寄存器传输级的代码转化成逻辑门级

//行为级的抽象:
//           系统级
//           算法级
//           寄存器传输级
//           逻辑门级
//           开关电路级

//clg400:400个门电路

//速度:-1:商用
//      -2:工业级
//      -3:军用级
      
// DSP:值越高,频率越高
 
// FPGA开发流程:
//             1、需求分析(功能、板卡确定)
//             2、模块划分(FPGA设计思想:自顶向下)
//             3、代码编写(RTL级)
//             4、综合前仿真(验证功能)
//             5、综合(RTL级代码转化为门级电路、检查代码逻辑的错误)
//             6、布局布线(将各个模块的延时都联系起来)
//             7、综合后仿真(时序仿真)
//             8、生成比特流
//             9、上版验证
//             10、板级验证(debug)
             
//模块的开始:module
//模块的结束:endmodule
//模块包含:
//(1)端口描述  input  output  inout
//(2)逻辑描述(即输入是如何影响输出的)
//     组合逻辑:在数字电路中,电路任意时刻的输出,仅仅决定于该时刻电路的输入,而与电路原来的状态无关,则该电路简称逻辑电路,或者组合电路。
//               电路特点:
//                       输入输出之间没有反馈延迟通道
//                       电路中无记忆单元
//                实例:多路选择器、译码器、编码器、半加器
//      时序逻辑:
//电路中有无记忆电路 
//变量类型:
//wire  :  线性     传输数据    assign赋值    (不能用来存储数据)
//reg   : 寄存器    存储数据    always赋值
//always:循环语句(for、while)
//触发条件:
//(1)电平触发:组合逻辑,持续性    always@(*)
//(2)边沿触发:一般用在时序逻辑电路,瞬间性触发   always@(posedge sysclk)
//位运算符:每一位都需要进行运算
//&
//|
//~
//^  :异或
//~^ :同或
//a=8'b0010_1100  b=^a = 1  c=~a = 1101_0011
//     0  1  0 0
//逻辑运算符:整体
//&&
//||
//!
//a=4'b0101  b = ~a = 4'b1010  c =!a = 0
//赋值运算符:
//阻塞赋值:   "="     顺序赋值      组合逻辑
//非阻塞赋值: "<="   同时赋值       时序逻辑
//a=1 b=2 c=3
//always@(*)  
//    begin
//        a = b;
//        c = a;
//    end     a=2  b=2 c=2
//always@(*)  
//    begin
//        a <= b;
//        c <= a;
//    end    a=2 b=2 c=1   
//条件运算符:(三目运算符)
//a=(b == 1) ? 1 : 0;
//---------------------
//if(b==1)
//    a = 1;
//else
//    a = 0;
//生成锁存器:
//(1)写if  不写else
//(2)写case不写default
//*/
module half_add(
    input              in1      , // 0   1   0   1   //输入不能是reg  
    input              in2      , // 0   0   1   1

    output  reg        sum      , // 0   1   1   0
    output  reg        count      // 0   0   0   1

    );
    wire[1:0]   sel      ;        // 00  10  01  11
    assign  sel = {in1,in2};
if   else语句
//always@(*)   ///敏感信号量表
//    if(in1 == 0  && in2 == 0)begin
//        sum   = 0;    
//        count = 0;
//    end
//    else if(in1 == 1  && in2 == 0)begin
//        sum   = 1;    
//        count = 0;
//    end
//    else if(in1 == 0  && in2 == 1)begin
//        sum   = 1;    
//        count = 0;
//    end 
//    else  begin  in1 == 1  && in2 == 1     
//        sum   = 0;    
//        count = 1;
//    end
///case
always@(*)
    case(sel) //这里只能用位拼接了,如果不用位拼接的话只能再设置一个变量,让他等于a和b的关系 ,记得要定义好a与b的关系
        2'b00:begin
            sum   = 0;    
            count = 0;
        end
        2'b10:begin
            sum   = 1;    
            count = 0;
        end    
        2'b01:begin
            sum   = 1;    
            count = 0;
        end 
        2'b11:begin
            sum   = 0;    
            count = 1;
        end
        default:begin
            sum   = 0;    
            count = 0;
        end
    endcase
///assign:连续赋值语句
//assign  sum   = in1 ^ in2;    //数据类型前面要改成wire类型
//assign  count = in1 & in2;
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值