1 - 基本逻辑门代码设计和仿真

1 - 基本逻辑门代码设计和仿真

设计流程的改变:

image-20211117182951018

反相器:

image-20211117183040239

八位反相器:

image-20211117190447049

与非门:

image-20211117190536647

四位与非门:

image-20211117190831257

位逻辑操作运算符:

image-20211117190919154

多位宽电路符号图画法(打斜杠写数字):

image-20211117191018064

代码结构:
时间作者
module 功能

timescale

module (端口名)

端口属性【输入输出】

输入输出关系

endmodule

module testbench; // testbench 没有端口,不带括号,但要写分号

定义输入输出,输入 reg,输出 wire,把信号接到例化后的 module 里面。

异名例化 module

initial 按时间定义各个变量的值

endmodule

例子:
//2021.11.15 lyw
//反相器设计
//1ns的时间单位,10ps的时间精度
`timescale 1ns/10ps
module inv (
A,
Y
);
    input                               A                          ;
    output                              Y                          ;
    assign Y=~A;
endmodule

//测试代码 testbench 不带括号
module inv_tb;
reg                                     aa                         ;
wire                                    yy                         ;
inv inv(
    //异名例化
    .A                                 (aa                        ),
    .Y                                 (yy                        ) 
);
initial begin
        aa<=0;
    //#10表示过十个时间单位
    #10 aa<=1;
    #10 aa<=0;
    #10 aa<=1;
    //仿真停止用Verilog的系统任务
    #10 $stop;
end
endmodule

代码关键:assign 组合逻辑赋值语句,用 initial 语句块写 testbench。


PS:

学习内容总结自网络,主讲教师为北京交通大学李金城老师。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
组合逻辑仿真器是一种模拟电路行为的工具,可以用来测试电路的正确性和性能。下面是一个简单的组合逻辑仿真器的设计,使用C语言编写。 1. 定义输入和输出端口 首先,需要定义需要模拟的电路的输入和输出端口。这些端口可以是开关、按钮或其他类型的输入设备,也可以是灯、显示器或其他类型的输出设备。在C语言中,可以使用变量来表示这些端口。例如,如果需要模拟一个四输入AND门,可以定义四个输入端口和一个输出端口: ```c int in1, in2, in3, in4, out; ``` 2. 定义逻辑门的行为 接下来,需要定义逻辑门的行为。在本例中,我们将使用AND门作为例子。AND门接受两个或多个输入,并且只有在所有输入都为1时,输出才为1。可以使用if语句来实现这个行为: ```c if (in1 && in2 && in3 && in4) { out = 1; } else { out = 0; } ``` 这段代码检查每个输入,如果所有输入都为1,则将输出设置为1,否则将输出设置为0。 3. 定义时钟 为了使仿真器能够模拟电路的行为,需要定义一个时钟。时钟是一个定期触发的事件,用于更新电路的状态。在简单的仿真器中,可以使用一个循环来模拟时钟。例如,可以使用一个while循环来模拟一个1Hz的时钟: ```c while (1) { // 模拟时钟延迟 delay(1000); // 1秒 // 更新输入状态 in1 = get_input(1); in2 = get_input(2); in3 = get_input(3); in4 = get_input(4); // 计算输出状态 if (in1 && in2 && in3 && in4) { out = 1; } else { out = 0; } // 更新输出状态 set_output(out); } ``` 在这个循环中,首先模拟了一个1秒的时钟延迟,然后更新了输入状态。接下来,计算输出状态,并将其更新为输出端口的状态。 4. 定义输入和输出函数 最后,需要定义输入和输出函数,以便仿真器可以与外界交互。例如,可以使用以下函数来获取输入状态: ```c int get_input(int port) { // TODO: 获取端口状态 } ``` 这个函数接受一个端口号作为参数,并返回相应的端口状态。类似地,可以使用以下函数来设置输出状态: ```c void set_output(int value) { // TODO: 设置输出状态 } ``` 这个函数接受一个值作为参数,并将输出端口设置为相应的值。 综上所述,以上是一个简单的组合逻辑仿真器的设计。当然,实际的电路可能会更加复杂,需要更多的输入和输出端口以及更复杂的逻辑行为。但是,以上的框架可以作为一个起点,根据实际需要进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值