soc系统设计分为软件设计和硬件设计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了soc系统设计分为软件设计和硬件设计相关的知识,希望对你有一定的参考价值。

soc系统设计分为软件设计和硬件设计,想问软件设计一般指什么设计?比如我现在要控制一个七段数码管,用vhdl写数码管的运行方式属于硬件设计,软件设计呢?

软件设计一版包括驱动开发和嵌入式平台应用程序开发。比如你提到的七段数码管如果是布线的画肯定归属于硬件设计的范畴,为实现控制算法而编写的代码就应该是软件设计。
一般而言,做soc软件设计的人只需要理解硬件的工作原理就可以了,毕竟对于我们来说不论硬件方向还是软件方向知识量都是十分巨大的,如果想搞软件设计的话,拥有基本的硬件使用方法就已经足够了。
仅仅就你所说的vhdlh写数码管的运行方式可以认为是软件设计,不过逻辑实现复杂度应该是很有限的。
参考技术A 软件设计是指的在SOC中运行的软件代码。
你所谓的七段数码管是硬件设计,但是不属于SOC。

SoC嵌入式软件架构设计之五:可执行程序的重构

          低端控制器对执行效率要求很高,成本敏感,因而SoC内置SRAM是紧缺资源。代码分块管理就是为了充分利用内存,提高内存的复用效率而提出的一种设计方法。代码分块管理不仅涉及到硬件,同样对操作系统和应用、驱动的设计都有要求,这些模块共同努力以使执行效率达到最高。

          本节讲述代码分块(Bank)管理思想下可执行文件的重构,即对程序编译后的可执行文件进行重新组织、打包,以在加载阶段获得最高的执行效率,减少内存占用。要使执行效率高,意味着可执行文件的格式尽可能简单,解析执行文件的流程简单,相应地,解析过程代码量少,即能够减少内存的占用。

          keil产生的Hex或者Bin,其实也是keil对axf调试文件进行抽取,重新打包生成。Hex和Bin可以通过烧写器下载到flash。GCC工具链会生成可执行格式ELF,也可以离线对ELF格式内容进行抽取,重新打包生产Hex格式,并烧写到flash中。本次讲述的是可执行文件存储在外存储设备(card,nand flash,硬盘)中,在运行前由操作系统将其加载到内存再执行这种情况。

          要对工具链生成的可执行文件(如ELF)进行重构,自然需要熟悉该执行文件的格式,如ELF,里面会包括文件头,SECTION节,符号段,代码段,数据段,还有调试信息等等。而程序的运行往往只需要其中较少的段信息。可执行文件就是要得到必要的段的信息和数据,将不必要的通通删除,并且根据代码分块管理的特点进行自定义格式的编制。这里不再对ELF等标准执行文件进行分析(以后可能另写文章),只描述重构后的目标格式,看看什么段信息和数据是操作系统必要要知道和获取的。

            1. 文件头

            1)格式标识符,如应用,驱动等

            2)版本号

            3)常驻代码段在文件中偏移

            4)常驻代码长度

            5)常驻代码段在内存中的起始地址            

            6)常驻数据(.DATA)段在文件中偏移

            7)常驻数据(.DATA)长度

            8)常驻数据(.DATA)在内存中的起始地址

            9).bss段长度

            10).bss段在内存中的起始地址

            11)程序入口地址ENTRY:第一行代码的地址,不是main哦,是运行时库的一行代码地址

            12)reserved,对齐到扇区或者1024字节。如果是驱动类型,则会增加两个字段:驱动入口地址和驱动退出地址。             

             2. 代码块头

             1)第一个Bank组的头,按顺序是第一个Bank的块信息、第二个Bank的块信息、。。。第N个Bank的块信息。一个Bank组最大含有N个Bank,不够的填0.

             2)第二个Bank组的头,按顺序是第一个Bank的块信息、第二个Bank的块信息、。。。第N个Bank的块信息。一个Bank组最大含有N个Bank,不够的填0.

             .....

             有几个Bank组由文件头的格式标识符来判定,由架构师事先约定。

             每个Bank块的块信息包括:bank块数据(代码和数据)在文件中的偏移,Bank长度,BAnk对应的内存地址。


    3.常驻代码段数据,对齐扇区

    4.常驻数据段数据,对齐扇区

    5.第一组Bank的数据,对齐扇区,只记录真实的Bank数据,一个Bank组不够N个bank时不需补0.

               6. 第二组Bank的数据,对齐扇区,只记录真实的Bank数据,一个Bank组不够N个bank时不需补0.

               7. 最后一个组的Bank数据。


         加载时解析该文件头,获得常驻代码段和数据段的信息,将两者加载到内存,对Bss段清0,然后读取到程序的ENTRY入口,跳到该地址执行即可,简单高效!

         Bank切换时,根据Bank组号和Bank号即快速定位到Bank的段信息地址,读出该Bank在文件中的偏移和Bank长度,进而读取并加载到复用的内存空间。    

 

请关注SoC嵌入式软件架构设计(控制器SoC固件架构)系列博文:

SoC嵌入式软件架构设计之一:系统内存需求评估 

SoC嵌入式软件架构设计之二:没有MMU的CPU实现虚拟内存管理的设计方法

SoC嵌入式软件架构设计之三:代码分块(Bank)设计原则

SoC嵌入式软件架构设计之四:内存空间规划分配

SoC嵌入式软件架构设计之五:可执行程序的重构

嵌入式:节省内存的软件设计技巧

   





以上是关于soc系统设计分为软件设计和硬件设计的主要内容,如果未能解决你的问题,请参考以下文章

SoC嵌入式软件架构设计之七:嵌入式系统固件的系统区文件系统设计

SoC嵌入式软件架构设计之七:嵌入式文件系统设计

SoC嵌入式软件架构设计之六:API设计方法

多核片上系统(SoC)架构的嵌入式DSP软件设计

基于intel soc+fpga智能驾驶舱和高级驾驶辅助系统软件设计

SoC嵌入式软件架构设计之四 :内存空间规划分配