//生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。
#include <windows.h>
#include <iostream>
const unsigned short SIZE_OF_BUFFER = 10 //缓冲区长度
unsigned short ProductID = 0//产品号
unsigned short ConsumeID = 0//将被消耗的产品号
unsigned short in = 0//产品进缓冲区时的缓冲区下标
unsigned short out = 0//产品出缓冲区时的缓冲区下标
int g_buffer[SIZE_OF_BUFFER]//缓冲区是个循环队列
bool g_continue = true//控制程序结束
HANDLE g_hMutex //用于线程间的互斥
HANDLE g_hFullSemaphore //当缓冲区满时迫使生产者等待
HANDLE g_hEmptySemaphore //当缓冲区空时迫使消费者等待
DWORD WINAPI Producer(LPVOID)//生产者线程
DWORD WINAPI Consumer(LPVOID)//消费者线程
int main()
{
每个BlackBox网表都需要有一个与之相对应的HDL文件来注明它的端口。这个HDL只说明BlackBox的端口信息,而不提供具体实现信息。这个只提供端口信息的HDL文件称为Wrapper。Wrapper的名字通常需要与BlackBox网表的名字相同。在ISE工程中使用BlackBox时只需要将它的Wrapper添加到工程中。然后像普通的模块一样在其上层声明和例化就可以使用。
将你的设计制作成BlackBox,也就是网表文件,这样别人看不到你的设计但是可以调用你的模块了。详细的参考信息如下:1. 什么是BlackBox
- 一个大的设计中可以用到一系列网表文件作为输入的一部分而并不全部使用HDL文件。当综合这个大设计时综合器不需要知道这个网表文件是怎样实现的,而只需要知道它的输入输出接口就可以了。这样的网表就称为黑盒子,因为我们不需要看到它的内部情况。
- 通常付费IP都会以BlackBox的形式
2. 如何使用BlackBox
- BlackBox网表可以是EDIF或NGC文件。
- 每个BlackBox网表都需要有一个与之相对应的HDL文件来注明它的端口。这个HDL只说明BlackBox的端口信息,而不提供具体实现信息。这个只提供端口信息的HDL文件称为Wrapper。Wrapper的名字通常需要与BlackBox网表的名字相同。
- 在ISE工程中使用BlackBox时只需要将它的Wrapper添加到工程中。然后像普通的模块一样在其上层声明和例化就可以使用。
- BlackBox网表文件可以放在ISE工程目录中,也可以放在其他任意文件夹内。当不放在ISE工程目录时,需要在Translate属性中将Macro Search Path指向这个目录。多个目录使用"|"分割。
3. 如何制作BlackBox
- BlackBox只是普通网表而已。XST的综合结果就可以直接作为BlackBox使用。
- 通常BlackBox外部还会连接其他逻辑,所以BlackBox中一般不插入IOBUF。在XST属性中去除Insert IO Buffer的选项。
引自:http://www.cnblogs.com/youngfq/archive/2011/06/15/2081123.html
=======================第二篇=======================
【问】ISE开发套件能否将自己写的模块封装成ip?这里所说的IP是指类似于用core generator生成的IP格式。
若不能,是否还有其它的工具能将自己所写的模块封装成IP
【答】这个可以吧,你如果只是做成一个IP core用ISE里面的开发套件就行了,如果要接到xilinx的microblaze核或者是powerpc核上就要用XPS来生成
引自:http://www.eetrend.com/forum/100023865
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)