一般在进行硬件设计的时候都要用软件模拟一下基本的实现。
上例子:
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+软件源码资料合集,TI大赛优秀设计作品,包括文档及软硬件设计资料,可以做为你的学习设计参考。光伏并网发电模拟装置_东南大学_TMS320F28027 光伏...
《硬件电路设计与实践(模拟与数字)》一书涵盖了硬件设计的重要领域,包括模拟电路和数字电路的设计原理与实践技巧。在硬件设计的世界里,无论是电子设备的基础构造,还是复杂系统的核心运算,都离不开这两种电路...
在本文中,我们将深入探讨如何使用ISP(In-System Programming)软件设计一个模拟骰子游戏系统。这个系统基于纯电路设计,旨在为用户提供一个虚拟的骰子投掷体验,适用于各种游戏场合,如桌面游戏、电子游戏等。下面...
标题中的“基于软件模拟的SPI端口CAN控制卡的软硬件设计”包含了几个核心概念:“软件模拟”、“SPI端口”、“CAN控制卡”和“软硬件设计”。下面将逐一进行解释。 1. 软件模拟(Software Simulation): 软件模拟...
在准备软件设计师考试的过程中,模拟试题是不可或缺的复习资源。本资料集合了五套完整的模拟试题及其答案,旨在帮助考生深入理解考试大纲,提高解题技巧,以期在实际考试中取得优异成绩。 一、试题结构与考点解析 ...
3. **软件模拟USB的实现**:在硬件层面,AVR的GPIO口被配置为模拟USB数据线(D+和D-),通过精确的时序控制,使得单片机能够按照USB协议发送和接收数据。在软件层面,需要编写固件(firmware)来实现USB协议栈,包括...
【ATM模拟软件设计文档】 本设计文档涵盖了自动提款机(ATM)模拟...综上所述,这个ATM模拟软件设计文档全面覆盖了软件生命周期中的关键阶段,从前期的规划到后期的测试和用户支持,确保了软件的开发质量和用户体验。
书中的光盘提供了一系列的教学资源,如HDL模拟器、MIPS模拟器、FPGA设计工具等,这些都是学习和掌握硬件设计与软件开发的宝贵资源。这些资源能够帮助读者更好地理解计算机系统的工作原理,提高他们解决实际问题的...
硬件设计时要注意时序和数据传输的正确性。 6.3.3 软件设计 在C程序设计中,需要编写发送串行数据的函数,处理时钟和数据线的控制,以确保数据正确传输到MAX517。 6.3.4 实例总结 实例分析了如何利用MAX517构建一...
总的来说,这个项目展示了如何在STM8S微控制器上利用硬件和软件模拟SPI与FSK433IC-A7108进行通信,涉及了嵌入式系统、微控制器编程、无线通信技术等多个方面的知识点。通过深入理解这些内容,开发者可以更好地设计和...
《模拟硬件按键的自动访问...以上是《模拟硬件按键的自动访问数据工具》原理图中的关键知识点,这些内容涵盖了电子设计的基础理论、微控制器编程、电路设计以及实际应用等多个方面,对于理解和实现这样的工具至关重要。
元器件的选择也是硬件设计中的重要环节。了解各种电阻、电容、电感、晶体管、集成电路等元器件的特性,以及它们在电路中的作用,可以帮助你根据需求选择合适的元器件。同时,还要关注元器件的温度、功率和寿命等因素...
《计算机组成与设计:硬件软件接口》是计算机科学领域中一本经典的教材,主要探讨了计算机系统的基本构造和工作原理,以及硬件与软件之间的交互。这本书的第三版答案提供了对书中练习题的详尽解答,帮助读者深入理解...
此外,模拟软件还可能包含故障模拟功能,以检验AGV在遇到硬件或软件故障时的应对策略。通过模拟电池电量耗尽、通信中断、机械故障等情景,可以提前预防和处理实际操作中可能出现的问题,确保AGV系统的可靠性。 ...
压缩包内的文件"硬件信息修改【防封专用】.exe"可能是该软件的可执行程序,专为防止被系统误判或被游戏服务器封禁而设计。这种防封功能可能对于那些在游戏环境中需要修改硬件信息的用户来说尤其重要,因为许多在线...