`

硬件设计中的软件模拟

J# 
阅读更多

一般在进行硬件设计的时候都要用软件模拟一下基本的实现。

上例子:

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

public class Dido {
	static final int LEN = 10;
	static final int COL = 3;
	static final int aLEN = 1;
	static final int bLEN = 2;
	static final int cLEN = 3;

	public static void main(String[] args) {
		List<String> frame = new ArrayList<String>();
		for(int i=0; i<aLEN; i++) {
			for(int j=0; j<COL; j++) {
				frame.add("a" + i + ""+j);
			}
		}
		for(int i=0; i<LEN; i++) {
			for(int j=0; j<COL; j++) {
				frame.add("e" + i + ""+j);
			}
		}
		for(int i=0; i<bLEN; i++) {
			for(int j=0; j<COL; j++) {
				frame.add("b" + i + ""+j);
			}
		}
		for(int i=0; i<LEN; i++) {
			for(int j=0; j<COL; j++) {
				frame.add("o" + i + ""+j);
			}
		}
		for(int i=0; i<cLEN; i++) {
			for(int j=0; j<COL; j++) {
				frame.add("c" + i + ""+j);
			}
		}

		Queue<Integer> eFifo = new ConcurrentLinkedQueue<Integer>();
		Queue<Integer> oFifo = new ConcurrentLinkedQueue<Integer>();
		Queue<Integer> freeFifo = new ConcurrentLinkedQueue<Integer>();

		// initial Memory size
		String[] r = new String[(LEN+1)*COL];
		
		// initial freeFifo
		for(int i=0; i<LEN+1; i++) {
			freeFifo.add(i);
		}

		int i = 0, addrS=99,addrO=99,colI=0,colO=0;
		int rowI = 0,rowO = 0;
		String inData, outData = "#";
		boolean isOdd = false;
		boolean starO = false;
		for(int clk=0; clk<200; clk++) {
			// input data
			inData = frame.get(i++);
			if(i == frame.size()) {
				i = 0;
			}

			// save
			if((inData.indexOf('e') != -1) || inData.indexOf('o') != -1) {
				if(colI == 0) {
					rowI = freeFifo.poll();
					if(inData.indexOf('e') != -1) {
						eFifo.add(rowI);
					} else {
						oFifo.add(rowI);
					}
				}
				addrS = rowI*COL + colI;
				r[addrS] = inData;
				colI = (colI+1==COL)?0:colI+1;
			}

			// output data
			if(!eFifo.isEmpty() && !oFifo.isEmpty()) {
				starO = true;
			}
			if(starO) {
				if(colO == 0) {
					if(isOdd) {
						rowO = oFifo.poll();
						isOdd = false;
					} else {
						rowO = eFifo.poll();
						isOdd = true;
					}
					freeFifo.add(rowO);
				}
				addrO = rowO*COL + colO;
				outData = r[addrO];
//				colO = (colO+1==COL)?0:colO+1;
				if(colO+1==COL) {
					colO = 0;
					if(eFifo.isEmpty() || oFifo.isEmpty()) {
						starO = false;
					}
				} else {
					colO++;
				}
			} else {
				outData = "#";
			}

			System.out.println("  " +clk + "  " +outData+ "  " +inData+ "  " + addrS+ "  "+addrO + "");
		}
	}
}

 上述程序模拟了一个简单的视频pal的变换,输入时的一帧数据是先一些行a,在一些行e(偶数场数据),再一些行b,再一些行o(奇数场数据),在一些行c,这里的abc为无用数据,利用for循环加上clk来模拟硬件的实现,eFifo 、oFifo 、freeFifo分别用来存放 偶数场、奇数场和可用地址。最后无用数据不变,偶数场和奇数场交替输出。

结果为:

  0  #  a00  99  99
  1  #  a01  99  99
  2  #  a02  99  99
  3  #  e00  0  99
  4  #  e01  1  99
  5  #  e02  2  99
  6  #  e10  3  99
  7  #  e11  4  99
  8  #  e12  5  99
  9  #  e20  6  99
  10  #  e21  7  99
  11  #  e22  8  99
  12  #  e30  9  99
  13  #  e31  10  99
  14  #  e32  11  99
  15  #  e40  12  99
  16  #  e41  13  99
  17  #  e42  14  99
  18  #  e50  15  99
  19  #  e51  16  99
  20  #  e52  17  99
  21  #  e60  18  99
  22  #  e61  19  99
  23  #  e62  20  99
  24  #  e70  21  99
  25  #  e71  22  99
  26  #  e72  23  99
  27  #  e80  24  99
  28  #  e81  25  99
  29  #  e82  26  99
  30  #  e90  27  99
  31  #  e91  28  99
  32  #  e92  29  99
  33  #  b00  29  99
  34  #  b01  29  99
  35  #  b02  29  99
  36  #  b10  29  99
  37  #  b11  29  99
  38  #  b12  29  99
  39  e00  o00  30  0
  40  e01  o01  31  1
  41  e02  o02  32  2
  42  o00  o10  0  30
  43  o01  o11  1  31
  44  o02  o12  2  32
  45  e10  o20  30  3
  46  e11  o21  31  4
  47  e12  o22  32  5
  48  o10  o30  3  0
  49  o11  o31  4  1
  50  o12  o32  5  2
  51  e20  o40  0  6
  52  e21  o41  1  7
  53  e22  o42  2  8
  54  o20  o50  6  30
  55  o21  o51  7  31
  56  o22  o52  8  32
  57  e30  o60  30  9
  58  e31  o61  31  10
  59  e32  o62  32  11
  60  o30  o70  9  3
  61  o31  o71  10  4
  62  o32  o72  11  5
  63  e40  o80  3  12
  64  e41  o81  4  13
  65  e42  o82  5  14
  66  o40  o90  12  0
  67  o41  o91  13  1
  68  o42  o92  14  2
  69  e50  c00  14  15
  70  e51  c01  14  16
  71  e52  c02  14  17
  72  o50  c10  14  6
  73  o51  c11  14  7
  74  o52  c12  14  8
  75  e60  c20  14  18
  76  e61  c21  14  19
  77  e62  c22  14  20
  78  o60  a00  14  30
  79  o61  a01  14  31
  80  o62  a02  14  32
  81  e70  e00  0  21
  82  e71  e01  1  22
  83  e72  e02  2  23
  84  o70  e10  15  9
  85  o71  e11  16  10
  86  o72  e12  17  11
  87  e80  e20  6  24
  88  e81  e21  7  25
  89  e82  e22  8  26
  90  o80  e30  18  3
  91  o81  e31  19  4
  92  o82  e32  20  5
  93  e90  e40  30  27
  94  e91  e41  31  28
  95  e92  e42  32  29
  96  o90  e50  21  12
  97  o91  e51  22  13
  98  o92  e52  23  14
  99  #  e60  9  14
  100  #  e61  10  14
  101  #  e62  11  14
  102  #  e70  24  14
  103  #  e71  25  14
  104  #  e72  26  14
  105  #  e80  3  14
  106  #  e81  4  14
  107  #  e82  5  14
  108  #  e90  27  14
  109  #  e91  28  14
  110  #  e92  29  14
  111  #  b00  29  14
  112  #  b01  29  14
  113  #  b02  29  14
  114  #  b10  29  14
  115  #  b11  29  14
  116  #  b12  29  14
  117  e00  o00  12  0
  118  e01  o01  13  1
  119  e02  o02  14  2
  120  o00  o10  0  12
  121  o01  o11  1  13
  122  o02  o12  2  14
  123  e10  o20  12  15
  124  e11  o21  13  16
  125  e12  o22  14  17
  126  o10  o30  15  0
  127  o11  o31  16  1
  128  o12  o32  17  2
  129  e20  o40  0  6
  130  e21  o41  1  7
  131  e22  o42  2  8
  132  o20  o50  6  12
  133  o21  o51  7  13
  134  o22  o52  8  14
  135  e30  o60  12  18
  136  e31  o61  13  19
  137  e32  o62  14  20
  138  o30  o70  18  15
  139  o31  o71  19  16
  140  o32  o72  20  17
  141  e40  o80  15  30
  142  e41  o81  16  31
  143  e42  o82  17  32
  144  o40  o90  30  0
  145  o41  o91  31  1
  146  o42  o92  32  2
  147  e50  c00  32  21
  148  e51  c01  32  22
  149  e52  c02  32  23
  150  o50  c10  32  6
  151  o51  c11  32  7
  152  o52  c12  32  8
  153  e60  c20  32  9
  154  e61  c21  32  10
  155  e62  c22  32  11
  156  o60  a00  32  12
  157  o61  a01  32  13
  158  o62  a02  32  14
  159  e70  e00  0  24
  160  e71  e01  1  25
  161  e72  e02  2  26
  162  o70  e10  21  18
  163  o71  e11  22  19
  164  o72  e12  23  20
  165  e80  e20  6  3
  166  e81  e21  7  4
  167  e82  e22  8  5
  168  o80  e30  9  15
  169  o81  e31  10  16
  170  o82  e32  11  17
  171  e90  e40  12  27
  172  e91  e41  13  28
  173  e92  e42  14  29
  174  o90  e50  24  30
  175  o91  e51  25  31
  176  o92  e52  26  32
  177  #  e60  18  32
  178  #  e61  19  32
  179  #  e62  20  32
  180  #  e70  3  32
  181  #  e71  4  32
  182  #  e72  5  32
  183  #  e80  15  32
  184  #  e81  16  32
  185  #  e82  17  32
  186  #  e90  27  32
  187  #  e91  28  32
  188  #  e92  29  32
  189  #  b00  29  32
  190  #  b01  29  32
  191  #  b02  29  32
  192  #  b10  29  32
  193  #  b11  29  32
  194  #  b12  29  32
  195  e00  o00  30  0
  196  e01  o01  31  1
  197  e02  o02  32  2
  198  o00  o10  0  30
  199  o01  o11  1  31

 

分享到:
评论

相关推荐

    硬件课程设计——模拟自动洗衣机

    在本“硬件课程设计——模拟自动洗衣机”的项目中,学生将深入学习并实践8086汇编语言,以及硬件课程设计的基本理念。这个课程设计旨在通过一个实际的应用场景,帮助学习者理解微处理器如何控制复杂的机械设备,如...

    计算机组成与设计硬件软件接口第四版答案

    "计算机组成与设计硬件软件接口第四版答案" 计算机组成与设计是计算机科学的基础课程,本书第四版答案涵盖了计算机组成、计算机设计、硬件软件接口等方面的知识。本书旨在帮助学生了解计算机系统的架构、组成和设计...

    7篇基于DSP设计的光伏模拟装置设计论文文档+ AD设计硬件原理图PCB+软件源码资料.zip

    7篇基于DSP设计的光伏模拟装置设计论文文档+ AD设计硬件原理图PCB+软件源码资料合集,TI大赛优秀设计作品,包括文档及软硬件设计资料,可以做为你的学习设计参考。光伏并网发电模拟装置_东南大学_TMS320F28027 光伏...

    硬件电路设计与实践(模拟与数字)

    《硬件电路设计与实践(模拟与数字)》一书涵盖了硬件设计的重要领域,包括模拟电路和数字电路的设计原理与实践技巧。在硬件设计的世界里,无论是电子设备的基础构造,还是复杂系统的核心运算,都离不开这两种电路...

    ISP软件设计模拟骰子游戏系统

    在本文中,我们将深入探讨如何使用ISP(In-System Programming)软件设计一个模拟骰子游戏系统。这个系统基于纯电路设计,旨在为用户提供一个虚拟的骰子投掷体验,适用于各种游戏场合,如桌面游戏、电子游戏等。下面...

    基于软件模拟的SPI端口CAN控制卡的软硬件设计.pdf

    标题中的“基于软件模拟的SPI端口CAN控制卡的软硬件设计”包含了几个核心概念:“软件模拟”、“SPI端口”、“CAN控制卡”和“软硬件设计”。下面将逐一进行解释。 1. 软件模拟(Software Simulation): 软件模拟...

    软件设计师模拟试题及答案(5套)

    在准备软件设计师考试的过程中,模拟试题是不可或缺的复习资源。本资料集合了五套完整的模拟试题及其答案,旨在帮助考生深入理解考试大纲,提高解题技巧,以期在实际考试中取得优异成绩。 一、试题结构与考点解析 ...

    软件模拟USB AVRUSB

    3. **软件模拟USB的实现**:在硬件层面,AVR的GPIO口被配置为模拟USB数据线(D+和D-),通过精确的时序控制,使得单片机能够按照USB协议发送和接收数据。在软件层面,需要编写固件(firmware)来实现USB协议栈,包括...

    ATM模拟软件设计文档

    【ATM模拟软件设计文档】 本设计文档涵盖了自动提款机(ATM)模拟...综上所述,这个ATM模拟软件设计文档全面覆盖了软件生命周期中的关键阶段,从前期的规划到后期的测试和用户支持,确保了软件的开发质量和用户体验。

    计算机组成与设计:硬件 软件接口

    书中的光盘提供了一系列的教学资源,如HDL模拟器、MIPS模拟器、FPGA设计工具等,这些都是学习和掌握硬件设计与软件开发的宝贵资源。这些资源能够帮助读者更好地理解计算机系统的工作原理,提高他们解决实际问题的...

    模拟量接口设计(硬件接线图和c程序设计)

    硬件设计时要注意时序和数据传输的正确性。 6.3.3 软件设计 在C程序设计中,需要编写发送串行数据的函数,处理时钟和数据线的控制,以确保数据正确传输到MAX517。 6.3.4 实例总结 实例分析了如何利用MAX517构建一...

    基于stm8s硬件2线SPI与软件模拟SPI通信A7108

    总的来说,这个项目展示了如何在STM8S微控制器上利用硬件和软件模拟SPI与FSK433IC-A7108进行通信,涉及了嵌入式系统、微控制器编程、无线通信技术等多个方面的知识点。通过深入理解这些内容,开发者可以更好地设计和...

    参赛作品《模拟硬件按键的自动访问数据工具》-模拟硬件按键工具原理图.rar

    《模拟硬件按键的自动访问...以上是《模拟硬件按键的自动访问数据工具》原理图中的关键知识点,这些内容涵盖了电子设计的基础理论、微控制器编程、电路设计以及实际应用等多个方面,对于理解和实现这样的工具至关重要。

    新手入门必看的硬件设计资料

    元器件的选择也是硬件设计中的重要环节。了解各种电阻、电容、电感、晶体管、集成电路等元器件的特性,以及它们在电路中的作用,可以帮助你根据需求选择合适的元器件。同时,还要关注元器件的温度、功率和寿命等因素...

    AGV模拟.rar_AGV模拟软件_agv_agv simulation_agv模拟_chartuw8

    此外,模拟软件还可能包含故障模拟功能,以检验AGV在遇到硬件或软件故障时的应对策略。通过模拟电池电量耗尽、通信中断、机械故障等情景,可以提前预防和处理实际操作中可能出现的问题,确保AGV系统的可靠性。 ...

    计算机组成与设计 硬件软件接口 第三版 答案

    《计算机组成与设计:硬件软件接口》是计算机科学领域中一本经典的教材,主要探讨了计算机系统的基本构造和工作原理,以及硬件与软件之间的交互。这本书的第三版答案提供了对书中练习题的详尽解答,帮助读者深入理解...

    电脑软硬件信息修改软件安全无毒

    从"电脑软硬件信息修改软件安全无毒"这一标题,我们可以看出该软件在开发和设计时的侧重点:为用户提供了一个既安全又无毒的环境,以进行系统信息的更改。"亲测有用"的描述则进一步保证了软件的实用性和有效性。而且...

    基于TMS320F2812 TMS320F28335 TI电子设计大奖赛论文+软件源码+硬件设计文件合集.zip

    基于TMS320F2812 TMS320F28335 TI电子设计大奖赛论文+软件源码+硬件设计文件合集: 基于TMS320F28027的智能晾衣架 基于TMS320F28033的20MHz手持式双踪袖珍示波器 基于TMS320F28035电动汽车电机控制器 基于TMS320F...

Global site tag (gtag.js) - Google Analytics