2022.7.18学习总结(Verilog HDL数字集成电路设计原理与应用)

Verilog HDL 程序设计语句和描述方式

一、数据流建模

—— 连续赋值的目标类型主要是标量线网和向量线网两种。

        (1)标量线网,如:wire a , b;

        (2)向量线网,如:wire [3:0]a,b;

1.连续赋值语句:对组合电路的基本描述。关键词:assign

        显示连续赋值语句:<net_declaration><range><name>;

    ——assign #<delay><name>=Assignment expression;

        隐式连续赋值语句:<net_declaration><drive_strength><range>#<delay><name>=Assignment expression;

2.连续赋值语句需注意以下几点:

        ——赋值目标只能是线网类型(wire);

        ——只要等式右边表达式任何一个变量有变化,表达式立即被计算,计算的结果立即赋给

左边信号(若没有定义延时量);

        ——连续赋值语句不能出现在过程块中;

        ——多个连续赋值语句之间只能是并行语句,因此与位置顺序无关;

        ——该语句中的延时具有硬件电路中惯性延时的特性,任何小于该延时的信号变化都将被过滤掉,不会体现在输出端口上。

二、行为级建模

模型结构:(此表待修改格式)

模块描述定义行
端口类型说明过程语句initial/always
数据类型说明
描述体——→过程块1————→语句块过程赋值语句
结束行过程块2高级程序语句
连续赋值语句

类别语句可综合性

过程

语句

initial
always
语句块串行语句块begin--end
并行语句块fork--join
赋值语句过程连续赋值assign
过程赋值=,<=
条件语句if--else
case,casez,casex
循环语句forever
repeat
while
for

过程语句:

1.initial过程语句,设计时尽可能不用,仅在仿真和测试中使用

2.always语句块,相对于initial过程块,always语句块的触发状态是一直存在的,只要满足always后面的敏感事件列表,就执行过程块。

格式:always@<敏感事件列表>

@(a)                                                    //当信号a的值发生改变时
@(a or b)                                             //当信号a的值或b的值发生改变时,或写作(a,b)
@(posedge a)                                      //当信号a的上升沿到来时
@(negedge a)                                      //当信号a的下降沿到来时
@(posedge clk or negedge reset)        //当时钟信号clk上升沿到来时或复位信号reset下降

                                                             沿到来时

需注意:

        无论是对时序逻辑还是组合逻辑,Verilog HDL要求在过程语句initial和always的过程中,被赋值信号必须定义位"reg"类型。

        对于开发者如何选取敏感事件作为过程的触发条件在Verilog HDL程序中有一定的设计要求

     (1)采用过程语句对组合逻辑电路进行描述时,需将全部的输入信号列入敏感信号列表。

     (2)采用过程语句对时序电路进行描述时,需要把时间信号和部分输入信号列入敏感事件列表,应当注意的是,不同的敏感事件列表会产生不同的电路形式。

3.过程语句描述实例(此处以 Quartus 18.1为例):

3.1 4选1数据选择器 

module mux4_1(
//定义输入与输出信号
	input 	    in0,in1,in2,in3,
	input [1:0] sel,
	output reg [1:0] out
	
);

//定义内部信号

	always@(*) //敏感信号列表
		case(sel)
			2'b00:	out = in0;
			2'b01:	out = in1;
			2'b10:	out = in2;
			2'b11:	out = in3;
			default:;
		endcase
endmodule

3.2 同步置数,同步清零计数器 

module counter(
//定义输入与输出信号
	input  	   [7:0]	data,
	input 				load,clk,reset,
	output reg [7:0]	out
);

//定义内部信号

	always@(posedge clk)begin //当时钟clk上升沿执行
		if(!reset) begin
			out = 8'h00;
		end
		else if(load)begin
			out = data;
		end
		else begin
			out = out + 1;
		end
	end
endmodule

三、结构化建模

............未完待续

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值