integer是什么 vivado_Verilog数电实验modelsim与vivado

这篇博客详细介绍了使用Verilog进行8位加法计数器的设计,包括模块定义、过程赋值、非阻塞与阻塞赋值的区分、参数定义、任务与函数的使用。同时,提到了modelsim和vivado中的仿真与综合问题,如端口匹配、信号调试和错误解决方法。
摘要由CSDN通过智能技术生成

module《模块名》

参数定义

端口类型说明

数据类型定义

assign

always initial

任务和函数

endmodule

//8位加法计数器 module counter8(out,cout,data,load,cin ,clk)

output【7:0】out;

output cout;

input load,cin,clk; // load初始位,cin是进位 input【7:0】data;

reg 【7:0】out; // reg寄存器类型 always@(posedge clk) //总是检测, @有when 的意思。 begin

if(load)

out=data //置数 else

out= out+cin ;//计数或保持 end

assign cout =&out&cin //&out = out【7】&out【6】。。。。&out【1】所有位endmodule

bufif1 bufif0 notif1 notif0 三态门

nand xnor 同或门

module gateinst (a,b,c,d,y)

input a,b,c,d

output y

wire x

and andgate(x,a,b,c)

//加法器

module counter8(out,cout,data,load,cin,clk);

output【7:0】 out;

output cout;

input load, cin,clk;

input【7:0】data;

reg【7:0】 out;

always @(posedge上升沿 clk) negedge 下降沿

begin

if(load) out =data ;

else

out =out+cin;

end

assign &cin&out ; 连续赋值, 常用对wire变量赋值,随时变化随时赋值

end module

过程赋值 :

1。非阻塞赋值, 块结束时才赋值,

2。阻塞赋值, 该语句结束时赋值。

常量:

位宽‘ 进制 数字

8是二进制八位 例如 8‘o305 011000101

变量:网络型 wire 常用来表示assign语句赋值的组合逻辑信号,缺省自动定义为wire型

寄存器型 reg integer real time

reg a,b; reg 【7:0】 mymem【1023:0】 1k字节 8bits的存储器

== 相等和 === 全等的区别是什么?

A== 1’bx 不会为真 ,而=== 对于x不定态和高阻态z会判断为真

《=赋值 时序,非阻塞赋值。 =阻塞赋值,组合逻辑电路。

reg【3:0】a; &a 就是a 每一位互相与

MUX out =sel?in1:in0;

优先级

!~ 运算符

& , |

* / %

initial 主要面向功能模拟,通常不具有可综合性,

begin

初始化变量

初始化存储器

end

always@

begin

end

always 不能嵌套

一般assign是组合逻辑电路 ,直接赋值

过程赋值 需要reg F ;

parameter MODULUS = 8’h59 //改变模的大小

7。7。2

case = C语言中的switch casez 高阻位不考虑。 casex高阻位和不定值都不考虑。只关心其他位。 ? 也可以

case(敏感语句式)

4’d0:

4’d1:

4’b1zzx: b=2’b11

4’b001?: b=2’b01

endcase

条件语句:

条件不满足时,会保持原值。组合电路要列出所有分支。否则会产生隐含触发器。

repeat (size) 循环size次, begin if() a < 1 b>1 end end

7。9 task 和function语句

task 《任务》

endtask

function 《返回值位宽或类型》 《函数名》; 手写的时候别忘了;

endfunction

7。11 语句的顺序执行 和并行执行

7。12 Verilog HDL 模型级别

行为描述级: 系统级,算法, 寄存器级

门级

开关级

7。12。1 行为级描述

Q &A

Q:为什么综合后点了debug没有出现原理图呢?

A: 因为测试文件置为顶层。重新设置顶层

Q:可不可以就一部分simulation? 比如只simulate comp ?

A:右击相应测试文件,设为顶层文件

出现的错误:

1. 调用mux的模块名字错了。解决方法:Mux模块名字改成对应的。 成功仿真。

2.仿真MUX结果,没有输出。 因为寄存器没有设置位宽 只写了reg out ;解决方法:改成 reg【N-1:0】 out

3. 信号只有in,out。无法调试。因为之前将测试文件置为顶层。解决方法:重新设置顶层。出现了各个模块的信号。

4. 端口不对应 in0输入有问题。解决方法: 修改in0(in0)为in0(a) 括号里 a为线,in0为模块中的端口。

5. 波形出错, 没有加入MUX 解决方法: 加入MUX

心得:

1.控制器一般采用二段式或三段式。

2.Verilog 不能用reg 作为调用模块的输出, 得用wire。

3.Modelsim 第三个可以zoom fit 直接窗口一样大小。

4.{}用作位拼接,所以 verilog中用begin end 来替代{}

5.zoom in active curve 可以以光标为中心放大。

6. always@(*) //always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。

7. 改掉一个错误之后可以直接再次编译,因为一个错误有连环错误。

8. 控制器clear变量, always 里就是reg型, always外是wire型.

出现错误:

1.调用按键处理的模块名字错了。解决方法:按键处理模块名字改成对应的。 成功仿真。

2.仿真结果,没有输出。 因为寄存器没有设置位宽 只写了reg out ;解决方法:改成 reg【N-1:0】 out

3. 信号只有in,out。无法调试。因为之前vivado将测试文件置为顶层。解决方法:重新设置顶层。出现了各个模块的信号。

4. 端口不对应 in0输入有问题。解决方法: 修改in0(in0)为in0(a) 括号里 a为线,in0为模块中的端口。

5. 波形出错, 没有加入MUX 解决方法: 加入MUX

6.下载后显示出错 解决方法: 52位没必要用变量传递,

7. 一开始的时候parameter sim是0,tb测试时才传入1

8. Q:为什么综合后点了debug没有出现原理图呢?

A: 因为把测试文件置为顶层。重新设置顶层

9. Q:可不可以就一部分simulation? 比如只simulate comp ?

A:右击相应测试文件,设为顶层文件

10. 还有一个错误,是输入变量不能直接定义为reg。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值