`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
Xilinx FPGA 零基础系列(0) 半加器的三种写法,以及一些重要的可以直接应用的语法知识
最新推荐文章于 2024-09-10 19:00:05 发布