精华内容
下载资源
问答
  • 世界上90%的都采用基于CAN总线的系统,而FlexRay是下一代通信协议事实上的标准,它的功能安全性如何是至关重要的。本文就通信协议标准FlexRay总线的功能安全性进行详细解析
  • 总线的功能和规范

    2021-01-25 20:06:08
    总线功能和规范可分为五大类型: 数据总线(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存数据。 地址总线(Address Bus)︰用来指定在RAM(Random Access Memory)之中储存数据地址。 控制总线(Control ...

    总线按功能和规范可分为五大类型:
    数据总线(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存的数据。
    地址总线(Address Bus)︰用来指定在RAM(Random Access Memory)之中储存的数据的地址。
    控制总线(Control Bus)︰将微处理器控制单元(Control Unit)的信号,传送到周边设备。
    扩展总线(Expansion Bus):外部设备和计算机主机进行数据通信的总线,例如ISA总线,PCI总线。
    局部总线(Local Bus)︰取代更高速数据传输的扩展总线。
    其中的数据总线DB(Data Bus)、地址总线AB((Address Bus)和控制总线CB(Control Bus) ,也统称为系统总线,即通常意义上所说的总线。

    展开全文
  • 以verilog和SystemVerilog示例代码说明如何实现FPGA内部输出数据总线功能

    前言

    在经典的硬件设计中,众多设备可以用分时复用的方案共享同一组数据总线,这大大简化了设备间的通信接口设计,同时还能很容易的实现设备间一对多或者多对一的通信。在FPGA的HDL程序设计中,有时我们也希望能够应用数据总线方案以降低设计难度并充分利用这一方案的便利性。
    在应用Verilog或者SystemVerilog编程时,映射于FPGA外部管脚的接口连线可以通过/CS、/RE、/WE等信号配合模块实现数据总线的读/写控制,在模块未取得数据总线的控制权前,模块一般向连向数据总线的输出接口赋值高阻态:'z。然而在FPGA内部一般高阻态的赋值是不被允许的,即使编译综合通过,高阻态的赋值也会被综合器综合成0或者1,这会对连接在同一数据总线上的不同设备产生冲突。
    为了解决这一冲突,在FPGA内部模块之间的数据总线必须使用选择器(mux)来实现.

    Verilog应用选择器实现数据总线功能

    所谓的选择器,实际上就是根据不同的输入选通信号选择不同模块的输出数据接口连接至数据总线。
    为了应用选择器选择特定模块的输出到数据总线,需要为每个模块分配一个选通信号,这里我们约定选通信号的值为1时表示模块选通,为0时则表示模块未选通。
    示例代码如下:

    module dbus_module #(
       parameter DATAOUT
    )(
       output wire[31:0] o_data
    );
       assign o_data = 32'(DATAOUT);
    endmodule
    
    module tb_verilog_dbus(
       input wire[2:0] ics,
       output wire[31:0] odata
    );
       wire[31:0] odata_sel[2:0]
       dbus_module #(.DATAOUT(0)) dm_0(.o_data(odata_sel[0]));
       dbus_module #(.DATAOUT(1)) dm_1(.o_data(odata_sel[1]));
       dbus_module #(.DATAOUT(2)) dm_2(.o_data(odata_sel[2]));
       assign odata = ics[0] ? odata_sel[0] :
                      ics[1] ? odata_sel[1] :
                      ics[2] ? odata_sel[2] : 32'hFFFFFFFF;
    endmodule

    应用SystemVerilog的interface简化数据总线的实现

    观察上面的代码可见,上面的verilog代码虽然实现了数据总线的功能,但如果要增加或减少挂载至数据总线的模块,就不得不更改数据总线模块的代码。虽然可以使用parameter来参数化模块数量,但仍然缺少一些必要的灵活性,比如:挂载输出相同类型数据的不同类型的模块至数据总线,这使得数据总线模块tb_verilog_dbus的代码不得不根据需求更改。
    SystemVerilog语言提供的interface恰好可以解决这一问题,interface可以添加verilog代码,且可以作为module的端口参数传递,因此我们可以将与数据总线相关的选择器和选通信号归纳至interface中,并将module的数据输出端口连接至interface的待选数据连线。示例代码如下:

    interface if_dbus #(
        parameter LINKED_MDL_CNT
    ) (
        output logic[31:0] odbus
    );
        logic[LINKED_MDL_CNT-1:0] ocs;
        wire[31:0] data2sel[LINKED_MDL_CNT-1:0];
        always_comb begin
            odbus = '0;
            for (int i = 0; i < LINKED_MDL_CNT; i++) begin
                if (ocs[i]) odbus = data2sel[i];
            end
        end
    endinterface
    

    应用if_dbus 示例代码如下:

    
    module dbus_mdl1 #(
       parameter DATAOUT
    )(
       output wire[31:0] o_data
    );
       assign o_data = 32'(DATAOUT);
    endmodule
    module dbus_mdl2 #(
        parameter DATAOUT
    )(
        output wire[31:0] data_o
    );
        assign data_o = 32'(DATAOUT);
    endmodule
    
    module tb_if_dbus;
        wire[31:0] dbus2exam;
        if_dbus #(
            .LINKED_MDL_CNT(5)
        ) dbus_ifi(
            .odbus(dbus2exam)
        );
        genvar i;
        generate
            for (i= 0; i < 3; i++) begin:MDL1_GEN
                dbus_mdl1 #(
                    .DATAOUT(i)
                ) im(
                    .o_data(dbus_ifi.data2sel[i])
                );
            end
            for (i = 3; i < 5; i++) begin:MDL2_GEN
                dbus_mdl2 #(
                    .DATAOUT(i)
                ) im2(
                    .o_data(dbus_ifi.data2sel[i])
                );
            end
        endgenerate
        // 测试总线输出数据的代码,查看dbus2exam
        reg clk;
        initial begin
            clk = 0;
        end
        always #1 clk = ~clk;
        reg[2:0] idxcntr;
        initial begin
            idxcntr = '0;
        end
        always_ff @(posedge clk) begin
            idxcntr = idxcntr + 1;
        end
        always_comb begin
            dbus_ifi.ocs = '0;
            if (idxcntr < 5) dbus_ifi.ocs[i] = 1'b1;
        end
    endmodule

    进阶:使用参数化的interface适配不同数据位宽的数据总线

    SystemVerilog的interface是可以参数化的,这给了我们做泛化编程的机会。将数据总线所传输数据的位宽以参数的形式在interface中体现,即可用同一个模块定义来适配不同数据位宽的总线。示例代码为:

    interface if_dbus #(
        parameter DATA_BITW,
        parameter LINKED_MDL_CNT
    ) (
        output logic[DATA_BITW:0-1] odbus
    );
        logic[LINKED_MDL_CNT-1:0] ocs;
        wire[DATA_BITW-1:0] data2sel[LINKED_MDL_CNT-1:0];
        always_comb begin
            odbus = '0;
            for (int i = 0; i < LINKED_MDL_CNT; i++) begin
                if (ocs[i]) odbus = data2sel[i];
            end
        end
    endinterface

    应用if_dbus 示例代码则变更如下:

    
    module dbus_mdl1 #(
       parameter DATAOUT
    )(
       output wire[31:0] o_data
    );
       assign o_data = 32'(DATAOUT);
    endmodule
    module dbus_mdl2 #(
        parameter DATAOUT
    )(
        output wire[31:0] data_o
    );
        assign data_o = 32'(DATAOUT);
    endmodule
    
    module tb_if_dbus;
        wire[31:0] dbus2exam;
        if_dbus #(
            .DATA_BITW(32),   // 增加对参数DATA_BITW的实例化
            .LINKED_MDL_CNT(5)
        ) dbus_ifi(
            .odbus(dbus2exam)
        );
        genvar i;
        generate
            for (i= 0; i < 3; i++) begin:MDL1_GEN
                dbus_mdl1 #(
                    .DATAOUT(i)
                ) im(
                    .o_data(dbus_ifi.data2sel[i])
                );
            end
            for (i = 3; i < 5; i++) begin:MDL2_GEN
                dbus_mdl2 #(
                    .DATAOUT(i)
                ) im2(
                    .o_data(dbus_ifi.data2sel[i])
                );
            end
        endgenerate
        // 测试总线输出数据的代码,查看dbus2exam
        reg clk;
        initial begin
            clk = 0;
        end
        always #1 clk = ~clk;
        reg[2:0] idxcntr;
        initial begin
            idxcntr = '0;
        end
        always_ff @(posedge clk) begin
            idxcntr = idxcntr + 1;
        end
        always_comb begin
            dbus_ifi.ocs = '0;
            if (idxcntr < 5) dbus_ifi.ocs[i] = 1'b1;
        end
    endmodule
    展开全文
  • 如何应用interface实现多个数据在数据总线打包传输

    上一篇文章中说明了如何使用SystemVerilog的interface来实现FPGA内部的输出数据总线功能,但仅给出了传输单个数据的方法。然而在实际应用中,我们可能会遇到需要传输多个数据的需求,此时前文给出的方案将存在一定的局限性。虽然我们可以声明多个不同的interface实例来分别传输这些数据,但总没有仅通过一个interface实例传输来得方便。

    要将多个数据通过一个interface传输,我们首先想到的是SystemVerilog的struct——通过将这些待传输的数据用struct打包,便可以通过一个interface传输了。但问题也随之而来了:
    1.struct不像interface那样支持参数化,对不同位宽的数据必须单独定义struct,这显然有悖于泛化编程的思想;
    2.数据总线interface中定义的struct类型不能被外部模块引用,只能通过interface中定义的modport来传输给外部的目标模块,然而interface的一个modport只能传递一个struct实例,对需要使用不同struct实例的外部模块来说需求显然无法满足,即无法实现多个外部模块与interface内部不同struct实例的连接。

    实际上,interface也可以实现struct的数据打包功能,而由于interface支持参数化,这也使得对打包数据的泛化编程变得可能;而且,interface支持定义modport,支持嵌入运算代码,使得其功能比struct更加强大。

    因此,传输多个数据的数据总线的解决方案是:
    1.用interface打包待传输数据,然后在数据总线interface中声明多个打包interface的实例;
    2.外部模块以打包interface或其内定义的modport作为形参,而在外部模块实例化时,选择数据总线interface中与本模块实例对应的打包interface实例连接至本模块实例上。
    示例代码:

    interface data_transfer;
    wire[31:0] data1;
    wire[15:0] data2;
    endinterface
    
    interface if_dbus #(
        parameter LINKED_MDL
    ) (
        output data_transfer odbus
    );
        logic[LINKED_MDL_CNT-1:0] ocs;
        data_transfer data2sel[LINKED_MDL_CNT-1:0];
        always_comb begin
            odbus = '0;
            for (int i = 0; i < LINKED_MDL_CNT; i++) begin
                if (ocs[i]) odbus = data2sel[i];
            end
        end
    endinterface
    

    应用示例:

    module dbus_mdl1 #(
       parameter DATA1,
       parameter DATA2
    )(
       output data_transfer o_data
    );
       assign o_data.data1 = 32'(DATA1);
       assign o_data.data2 = 16'(DATA2);
    endmodule
    module dbus_mdl2 #(
        parameter DATA1,
        parameter DATA2
    )(
        output data_transfer data_o
    );
        assign data_o.data1 = 32'(DATA1);
        assign data_o.data2 = 16'(DATA2);
    endmodule
    
    module tb_if_dbus;
        data_transfer dbus2exam;
        if_dbus #(
            .LINKED_MDL_CNT(5)
        ) dbus_ifi(
            .odbus(dbus2exam)
        );
        genvar i;
        generate
            for (i= 0; i < 3; i++) begin:MDL1_GEN
                dbus_mdl1 #(
                    .DATA1(i),
                    .DATA2(i*2)
                ) im(
                    .o_data(dbus_ifi.data2sel[i])
                );
            end
            for (i = 3; i < 5; i++) begin:MDL2_GEN
                dbus_mdl2 #(
                    .DATA1(i),
                    .DATA2(i*3)
                ) im2(
                    .o_data(dbus_ifi.data2sel[i])
                );
            end
        endgenerate
        // 测试总线输出数据的代码,查看dbus2exam
        reg clk;
        initial begin
            clk = 0;
        end
        always #1 clk = ~clk;
        reg[2:0] idxcntr;
        initial begin
            idxcntr = '0;
        end
        always_ff @(posedge clk) begin
            idxcntr = idxcntr + 1;
        end
        always_comb begin
            dbus_ifi.ocs = '0;
            if (idxcntr < 5) dbus_ifi.ocs[i] = 1'b1;
        end
    endmodule
    展开全文
  • TOPIC 上消费某消息 从而让程序写代码时,不需要关心进程间的链路,是否能投递到某个进程或服务等这些琐事上 另外,消息总线的实现,完全可以基于服务网格来实现: 一种把消息总线节点也看成普通节点,用服务网格来...

    架构图

     +--------------------+           +----------------+             +----------------+
     |                    |           |     NODE 1     |             |     NODE 2     |
     | TOPIC ROUTE INFO   |           |                |             |                |
     |                    |           | TOPIC LOGIN    |             | TOPIC LOGIN    |
     |  LOGIN 1* - NODE1  |           |                |             | TOPIC CHAT     |
     |  LOGIN 5* - NODE2  +<----+     |                |             | TOPIC GAME     |
     |                    |     |     |                |             |                |
     |  ...               |     |     |                |             |                |
     |                    |     |     |                |             |                |
     +--------------------+     |     |                |             |                |
     +--------------------+     |     |                |             |                |
     |                    |     |     |                |             |                |
     | CLIENT ROUTE INFO  |     |     |                |             |                |
     |                    |     |     +--------+-------+             +--------+-------+
     |  188 - BUS NODE X  |     |              |                              |
     |                    |     |              | AUTO ROTUE LOGIN 1*          | AUTO ROTUE LOGIN 2*
     |  ...               +<----+              | AUTO ROTUE LOGIN 5*          | AUTO ROTUE LOGIN 3*
     |                    |     |              |                              | AUTO ROTUE CHAT 1*
     |                    |     |              |                              | AUTO ROUTE GAME 1*
     |                    |     |              |                              |
     +--------------------+     |              |                              |
                                |              |                              |
    +---------------------------+--------------+------------------------------+--------------------+
    |                                             MESSAGE BUS                                      |
    +--------------------------------------------------+-------------------------------------------+
                                                       |
                                                       |
    +--------------------------------------------------+-------------------------------------------+
    |                                                 SLB                                          |
    +--------------------------------------------------+-------------------------------------------+
                                                       ^
                                                       |
                                                       |
                                                       |
                                               +-------+--------+
                                               |  CLIENT 188    |
                                               +----------------+
    
    

    该框架围绕消息总线展开,消息总线提供以下功能:

    • 可靠的消息收发(不丢消息)
    • 内置维护管理外部连接与消息总线集群的路由关系
    • 提供内置缺省的 TOPIC 路由算法
    • 可自定义 TOPIC 路由算法
    • 内置全链路消息投递监控
    • 服务节点功能可插拔,单应用开发

    市面上也有不少产品是这个概念,但是实现上还是会有不少差别,比如:

    • MESSAGE BUS 集群如何实现,节点间是否做链路互联
    • NODE 节点底层只连接 MESSAGE BUS 集群中的几个节点,还是做所有节点的链路互联
    • MESSAGE BUS 集群中节点发现、MESSAGE BUS 集群与 NODE 节点的节点发现

    等等,这些细节实现不一样,都会影响性能稳定性

    再说说这种框架的好处:

    • 开发者不需要关注链路,只需要关注投递消息给玩家的哪个 TOPIC 上
    • 开发者只需要关注功能,甚至不需要关注服务这种东西
    • 框架上层接口极简,只要发布、订阅 2 个接口

    与服务网格的关系

    粗看,消息总线与服务网格功能重叠,仔细分析下,两者功能没有重叠

    服务网络主要做服务治理,它的对象是服务,也就是进程。主要做的是倾向于运维方向

    消息总线主要做的让上层应用者,不用关心链路关系下,正确把玩家消息投递给自己或其他玩家

    做的是纯逻辑上的路由保证,即承诺:

    • 某消息发布到某玩家的某 TOPIC 上,保证能送达
    • 某玩家一定能从某 TOPIC 上消费某消息

    从而让程序写代码时,不需要关心进程间的链路,是否能投递到某个进程或服务等这些琐事上

    另外,消息总线的实现,完全可以基于服务网格来实现:

    • 一种把消息总线节点也看成普通节点,用服务网格来治理。多一层转发,效率会稍降些
    • 一种直接基于服务网格之上实现消息总线功能。这个需要对服务网络有比较深的使用基础

    其他

    最近接触 MQ 比较多,因此思维比较发散,在与同行交流中,或多或少涉及到这种架构的一些思想

    导致了本文,郑重说明,本文架构中的思想,市面行早已存在,也有不少实作

    后续会针对这种架构,做更深入的思考设计博客文章,或介绍这种架构的实作源代码分析

    展开全文
  • 设计了一种基于背板总线的继电保护装置平台架构。...该设计方案在110 kV智能变电站主变保护测控一体化装置中得到应用,满足装置面向过程总线的功能及性能要求,现场运行结果表明该设计方案的有效性和实用性。
  • 为了提高航空航天领域对信号处理、传输的实时性及可靠性,以Cyclone III系列EP3C40F324I7为核心处理器,设计了一种基于CPCI总线的功能通信卡。结合高效的FPGA算法,设计出一款实时性强、可靠性高的多功能通信卡。...
  • 总线接口的功能

    2020-01-09 20:50:06
    让外部设备和用户电路和微型计算机...数据通过接口有缓冲和串并变换作用 控制通路是cpu可以控制接口 接口可以反馈给cpu cpu与接口并行 提高效率 可处理中断 各个io设备并行 提高整机效率???????????????? ...
  • 通过隔离所有在上行侧的总线连接,这些新的集成电路解决了阻塞总线的共有问题,同时恢复下行总线。 如果串行数据输出SDAOUT或串行时钟输出SCLOUT为低电平的时间超过30ms,那么LTC4304将自动中断数据和时钟连接,...
  • 分析了Vxworks下PCI总线功能数据采集卡实现方法;以ADLINKPCI7396数据采集卡为例,介绍PCI总线设备配置空间,包括它结构及访问方法,重点介绍PCI总线设备在VxWorks下驱动程序开发步骤及编程要点,并对...
  • 项目实现过程中需要将获取的数据信息通过CAN总线传输到控制规划模块,本文主要介绍如何在TX2平台测试CAN总线的收发功能。 TX2是英伟达旗下为嵌入式平台人工智能应用开发出的一个硬件平台,TX1没有CAN bus功能,TX2...
  • GPIB系统中设备与总线的交互作用定义为接口功能。GPIB标准共定义了10种接口功能,包括5种基本接口功能和5种辅助接口功能。  基本接口功能是GPIB接口总线功能要素的核心,用于管理和控制消息在数据线上双向、异步、...
  • 针对工程需要,完成了基于数字信号处理器(DSP)PC104总线功能串行通信卡硬件电路和相关基础软件设计与调试。实验证明,采用TMS320F2812DSP能够实现异步串行通信、同步串行通信、CAN通信3种不同协议串行数据...
  • 它不仅满足了纺织基本I/O工艺需求,更是把CAN总线协议完美地融合进去,使用户很轻易地把系统各种设备通过CAN协议进行连接,本文介绍了CAN总线功能在艾默生CT PLC应用。  CAN总线基础知识简介  CAN总线...
  • 基于CAN总线的功能大型粮仓远程监测系统、电子技术,开发板制作交流
  • 同时,这种纠错功能也覆盖了从不关心错误设备检测、标识和恢复,从而使得此类设备可以从奇偶错误中恢复出来,不至于影响它们操作,因此,所有目标设备都应能在各种传输中产生奇偶位,以满足检测、标识和恢复...
  • 文章通过对CAN、DeviceNet、CANopen在五方面的比较,使CAN总线用户更深入...这几种协议最明显的不同是信息标识符的使用。...使得CAN总线的功能更加的丰富和适应更加复杂的应用,进一步推进了CAN总线在工业领域的推广和应用。
  • 基于总线的功能信息系统的研究,康丹丹,姜木霖,车辆行驶过程中,驾驶员能否快速准确的辨识各种行车参数是非常重要的。随着车内安装的电气设备的增加,驾驶室的控制面板也日趋复
  • 现场总线控制系统是一种全新分布控制系统,是以控制、计算机、数字通讯等技术为主要内容综合技术。基金会现场总线以其技术上优势,极有希望成为主流发展趋势。它最大特点就是应用功能块实现全分布式控制。
  • 针对工程需要,完成了基于数字信号处理器(DSP)PC104总线功能串行通信卡硬件电路和相关基础软件设计与调试.实验证明,采用TMS320F2812 DSP能够实现异步串行通信、同步串行通信、CAN通信3种不同协议串行...
  • 基于CPLD技术PC104总线功能扩展卡设计
  • 网络交换机设备须提供配置和管理功能来满足用户变化这一需求,研究了一种基于SMI总线控制智能以太网交换机网管系统,通过对这一交换机软硬件设计,实现了单SMI总线控制功能和实现、MDC/MDIO 读和写操作、...
  • 总线通信功能的智能测控节点(JB_T 10388-2002)国标全文,国家标准,有关带总线通信功能的智能测控节点,高清版本,低分下载。
  • 虽然在总线1中提到的总线结构中,似乎总线非常少,只有一两根.但是实际上,我们已经提到了,总线中其实包含了很多的数据线.并且各部件之间的位置关系...总线的分类与功能 按数据传送方式区分 并行传输总线 这种总线中含有n
  • 本系统结合了嵌入式开发技术、CAN 总线技术、蓝牙技术和计算机技术等, 采用在不同速度下设定系统输出与输入之间不同比例关系的方式,实现对车辆强 制限速的功能。在此基础上,为解决在开发过程中因对控制程序进行...
  • 添加CAN总线功能

    2019-10-10 21:33:48
    DSPcan总线部分添加 ...主要问题是他AB管脚功能,当它接入高电平时,对应了自动波特回环模式( autobaud),器件内部有一条 D 引脚到 R 引脚环回路径,可帮助控制器执行波特率检测或自动波特功能。...
  • 一种基于CAN总线的FTU通信功能的改造方案 作者:许力琴/孙莹/李之洪  摘 要:基于CAN总线技术,提出了一种改造馈线终端FTU通信功能的新方案,使改造过的FTU能够具有与现场总线CANbus直接接口的能力,从而为...
  • 基于CPCI总线的功能网络接口卡的设计与实现,张成伟,唐碧华,现实中的PCI设备多是单功能设备,尽管Linux对PCI总线有比较完美的支持,但是对多功能的支持不尽人意。在工控领域,采用CPCI总线接口芯
  • STM32 CAN总线故障检测功能的使用

    千次阅读 2020-07-11 16:32:50
    通过打开这个中断,配合代码可以精确的监测CAN总线的故障情况 就是监测对应CAN的ESR寄存器 可以使用轮询或者中断的方式 中断的方式,以CAN1为例 调用HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn),调好优先级,在CAN1_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,498
精华内容 4,999
关键字:

总线的功能