搜档网
当前位置:搜档网 › libusb的使用教程和例子

libusb的使用教程和例子

libusb的使用教程和例子
libusb的使用教程和例子

对于内核驱动的大部分设备,诸如带usb接口的hid设备,linux本身已经自带了相关的驱动,我们只要操作设备文件便可以完成对设备大部分的操作,而另外一些设备,诸如自己设计的硬件产品,这些驱动就需要我们驱动工程师开发出相关的驱动了。内核驱动有它的优点,然而内核驱动在某些情况下会遇到如下的一些问题:

1 当使用我们产品的客户有2.4内核的平台,同时也有2.6内核的平台,我们要设计的驱动是要兼容两个平台的,就连makefile 我们都要写两个。

2 当我们要把linux移植到嵌入平台上,你会发现原先linux自带的驱动移过去还挺大的,我的内核当然是越小越好拉,这样有必要么。这还不是最郁闷的地方,如果嵌入平台是客户的,客户要购买你的产品,你突然发现客户设备里的系统和你的环境不一样,它没有你要的驱动了,你的程序运行不了,你会先想:“没关系,我写个内核驱动加载一下不就行了“。却发现客户连insmod加载模块的工具都没移植,那时你就看看老天,说声我怎么那么倒霉啊,客户可不想你动他花了n时间移植的内核哦

3 花了些功夫写了个新产品的驱动,挺有成就感啊,代码质量也是相当的有水准啊。正当你沉醉在你的代码中时,客服不断的邮件来了,“客户需要2.6.5内核的驱动,config文件我已经发你了”“客户需要双核的 2.6.18-smp 的驱动”“客户的平台是自己定制的是2.6.12-xxx “你恨不得把驱动的源代码给客户,这样省得编译了。你的一部分工作时间编译内核,定制驱动

有问题产生必然会有想办法解决问题的人,libusb的出现给我们带来了某些方便,即节约了我们的时间,也降低了公司的成本。所以在一些情况下,就可以考虑使用libusb的无驱设计了。

下面我们就来详细讨论一下libusb, 并以写一个hid设备的驱动来讲解如何运用libusb,至于文章中涉及的usb协议的知识,限于篇幅,就不详细讲解了,相关的可自行查看usb相关协议。

一libusb 介绍

libusb 设计了一系列的外部API 为应用程序所调用,通过这些API应用程序可以操作硬件,从libusb的源代码可以看出,这些API 调用了内核的底层接口,和kernel driver中所用到的函数所实现的功能差不多,只是libusb更加接近USB 规范。使得libusb的使用也比开发内核驱动相对容易的多。

Libusb 的编译安装请查看Readme,这里不做详解

二libusb 的外部接口

2.1 初始化设备接口

这些接口也可以称为核心函数,它们主要用来初始化并寻找相关设备。

usb_init

函数定义:void usb_init(void);

从函数名称可以看出这个函数是用来初始化相关数据的,这个函数大家只要记住必须调用就行了,而且是一开始就要调用的.

usb_find_busses

函数定义:int usb_find_busses(void);

寻找系统上的usb总线,任何usb设备都通过usb总线和计算机总线通信。进而和其他设备通信。此函数返回总线数。

usb_find_devices

函数定义:int usb_find_devices(void);

寻找总线上的usb设备,这个函数必要在调用usb_find_busses()后使用。以上的三个函数都是一开始就要用到的,此函数返回设备数量。

usb_get_busses

函数定义:struct usb_bus *usb_get_busses(void);

这个函数返回总线的列表,在高一些的版本中已经用不到了,这在下面的实例中会有讲解

2.2 操作设备接口

usb_open

函数定义:usb_dev_handle *usb_open(struct *usb_device dev);

打开要使用的设备,在对硬件进行操作前必须要调用usb_open 来打开设备,这里大家看到有两个结构体usb_dev_handle 和usb_device 是我们在开发中经常碰到的,有必要把它们的结构看一看。在libusb 中的usb.h和usbi.h中有定义。

这里我们不妨理解为返回的usb_dev_handle 指针是指向设备的句柄,而行参里输入就是需要打开的设备。

usb_close

函数定义:int usb_close(usb_dev_handle *dev);

与usb_open相对应,关闭设备,是必须调用的, 返回0成功,<0 失败。

usb_set_configuration

函数定义:int usb_set_configuration(usb_dev_handle *dev, int configuration);

设置当前设备使用的configuration,参数configuration 是你要使用的configurtation descriptoes中的bConfigurationValue, 返回0成功,<0失败( 一个设备可能包含多个configuration,比如同时支持高速和低速的设备就有对应的两个configuration,详细可查看usb 标准)

usb_set_altinterface

函数定义:int usb_set_altinterface(usb_dev_handle *dev, int alternate);

和名字的意思一样,此函数设置当前设备配置的interface descriptor,参数alternate是指interface descriptor中的bAlternateSetting。返回0成功,<0失败

usb_resetep

函数定义:int usb_resetep(usb_dev_handle *dev, unsigned int ep);

复位指定的endpoint,参数ep 是指bEndpointAddress,。这个函数不经常用,被下面介绍的usb_clear_halt函数所替代。

usb_clear_halt

函数定义:int usb_clear_halt (usb_dev_handle *dev, unsigned int ep);

复位指定的endpoint,参数ep 是指bEndpointAddress。这个函数用来替代usb_resetep

usb_reset

函数定义:int usb_reset(usb_dev_handle *dev);

这个函数现在基本不怎么用,不过这里我也讲一下,和名字所起的意思一样,这个函数reset设备,因为重启设备后还是要重新打开设备,所以用usb_close就已经可以满足要求了。

usb_claim_interface

函数定义:int usb_claim_interface(usb_dev_handle *dev, int interface);

注册与操作系统通信的接口,这个函数必须被调用,因为只有注册接口,才能做相应的操作。

Interface 指bInterfaceNumber. (下面介绍的usb_release_interface 与之相对应,也是必须调用的函数)

usb_release_interface

函数定义:int usb_release_interface(usb_dev_handle *dev, int interface);

注销被usb_claim_interface函数调用后的接口,释放资源,和usb_claim_interface对应使用。

2.3 控制传输接口

usb_control_msg

函数定义:int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout);

从默认的管道发送和接受控制数据

usb_get_string

函数定义:int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf, size_t buflen);

usb_get_string_simple

函数定义:int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf, size_t buflen);

usb_get_descriptor

函数定义:int usb_get_descriptor(usb_dev_handle *dev, unsigned char type, unsigned char index, void *buf, int size);

usb_get_descriptor_by_endpoint

函数定义:int usb_get_descriptor_by_endpoint(usb_dev_handle *dev, int ep, unsigned char type, unsigned char index, void *buf, int size);

2.4 批传输接口

usb_bulk_write

函数定义:int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

usb_interrupt_read

函数定义:int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

2.5 中断传输接口

usb_bulk_write

函数定义:int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

usb_interrupt_read

函数定义:int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

基本上libusb所经常用到的函数就有这些了,和usb协议确实很接近吧。下面我们实例在介绍一个应用。

//----------------===================================

Libusb库的使用

使用libusb之前你的linux系统必须装有usb文件系统,这里还介绍了使用hiddev设备文件来访问设备,目的在于不仅可以比较出usb的易用性,还提供了一个转化成libusb驱动的案例。

3.1 find设备

任何驱动第一步首先是寻找到要操作的设备,我们先来看看HID驱动是怎样寻找到设备的。我们假设寻找设备的函数Device_Find(注:代码只是为了方便解说,不保证代码的健全)

/* 我们简单看一下使用hid驱动寻找设备的实现,然后在看一下libusb是如何寻找设备的*/ int Device_Find()

{

char dir_str[100]; /* 这个变量我们用来保存设备文件的目录路径*/

char hiddev[100]; /* 这个变量用来保存设备文件的全路径*/

DIR dir;

/* 申请的字符串数组清空,这个编程习惯要养成*/

memset (dir_str, 0 , sizeof(dir_str));

memset (hiddev, 0 , sizeof(hiddev));

/* hiddev 的设备描述符不在/dev/usb/hid下面,就在/dev/usb 下面

这里我们使用opendir函数来检验目录的有效性

打开目录返回的值保存在变量dir里,dir前面有声明

*/

dir=opendir("/dev/usb/hid");

if(dir){

/* 程序运行到这里,说明存在/dev/usb/hid 路径的目录*/

sprintf(dir_str,"/dev/usb/hid/");

closedir(dir);

}else{

/* 如果不存在hid目录,那么设备文件就在/dev/usb下*/

sprintf(dir_str,"/dev/usb/");

}

/* DEVICE_MINOR 是指设备数,HID一般是16个*/

for(i = 0; i < DEVICE_MINOR; i++) {

/* 获得全路径的设备文件名,一般hid设备文件名是hiddev0 到hiddev16 */ sprintf(hiddev, "%shiddev%d", dir_str,i);

/* 打开设备文件,获得文件句柄*/

fd = open(hiddev, O_RDWR);

if(fd > 0) {

/* 操作设备获得设备信息*/

ioctl(fd, HIDIOCGDEVINFO, &info);

/* VENDOR_ID 和PRODUCT_ID 是标识usb设备厂家和产品ID,驱动都需要这两个参数来寻找设备,到此我们寻找到了设备*/

if(info.vendor== VENDOR_ID && info.product== PRODUCT_ID) {

/* 这里添加设备的初始化代码*/

device_num++; /* 找到的设备数*/

}

close(fd);

}

}

return device_num; /* 返回寻找的设备数量*/

}

我们再来看libusb是如何来寻找和初始化设备

int Device_Find()

{

struct usb_bus *busses;

int device_num = 0;

device_num = 0; /* 记录设备数量*/

usb_init(); /* 初始化*/

usb_find_busses(); /* 寻找系统上的usb总线*/

usb_find_devices(); /* 寻找usb总线上的usb设备*/

/* 获得系统总线链表的句柄*/

busses = usb_get_busses();

struct usb_bus *bus;

/* 遍历总线*/

for (bus = busses; bus; bus = bus->next) {

struct usb_device *dev;

/* 遍历总线上的设备*/

for (dev = bus->devices; dev; dev = dev->next) {

/* 寻找到相关设备,*/

if(dev->descriptor.idVendor==VENDOR_ID&& dev->descriptor.idProduct == PRODUCT_ID) { /* 这里添加设备的初始化代码*/

device_num++; /* 找到的设备数*/

}

}

}

return device_num; /* 返回设备数量*/

}

注:在新版本的libusb中,usb_get_busses就可以不用了,这个函数是返回系统上的usb总线链表句柄

这里我们直接用usb_busses变量,这个变量在usb.h中被定义为外部变量

所以可以直接写成这样:

struct usb_bus *bus;

for (bus = usb_busses; bus; bus = bus->next) {

struct usb_device *dev;

for (dev = bus->devices; dev; dev = dev->next) {

/* 这里添加设备的初始化代码*/

}

}

3.2 打开设备

假设我们定义的打开设备的函数名是device_open,

/* 使用hid驱动打开设备*/

int Device_Open()

{

int handle;

/* 传统HID驱动调用,通过open打开设备文件就可*/

handle = open(“hiddev0”, O_RDONL Y);

}

/* 使用libusb打开驱动*/

int Device_Open()

{

/* LIBUSB 驱动打开设备,这里写的是伪代码,不保证代码有用*/

struct usb_device* udev;

usb_dev_handle* device_handle;

/* 当找到设备后,通过usb_open打开设备,这里的函数就相当open 函数*/

device_handle = usb_open(udev);

}

3.3 读写设备和操作设备

假设我们的设备使用控制传输方式,至于批处理传输和中断传输限于篇幅这里不介绍

我们这里定义三个函数,Device_Write, Device_Read, Device_Report

Device_Report 功能发送接收函数

Device_Write 功能写数据

Device_Read 功能读数据

Device_Write和Device_Read调用Device_Report发送写的信息和读的信息,开发者根据发送的命令协议来设计,我们这里只简单实现发送数据的函数。

假设我们要给设备发送72字节的数据,头8个字节是报告头,是我们定义的和设备相关的规则,后64位是数据。

HID驱动的实现(这里只是用代码来有助理解,代码是伪代码)

int Device_Report(int fd, unsigned char *buffer72)

{

int ret; /* 保存ioctl函数的返回值*/

int index;

unsigned char send_data[72]; /* 发送的数据*/

unsigned char recv_data[72]; /* 接收的数据*/

struct hiddev_usage_ref uref; /* hid驱动定义的数据包*/

struct hiddev_report_info rinfo; /* hid驱动定义的

memset(send_data, 0, sizeof(send_data));

memset(recv_data, 0, sizeof(recv_data));

memcpy(send_data, buffer72, 72);

/* 这在发送数据之前必须调用的,初始化设备*/

ret = ioctl(fd, HIDIOCINITREPORT, 0);

if( ret !=0) {

return NOT_OPENED_DEVICE;/* NOT_OPENED_DEVICE 属于自己定义宏*/ }

/* HID设备每次传输一个字节的数据包*/

for(index = 0; index < 72; index++) {

/* 设置发送数据的状态*/

uref.report_type = HID_REPORT_TYPE_FEATURE;

uref.report_id = HID_REPORT_ID_FIRST;

https://www.sodocs.net/doc/1a7661479.html,age_index = index;

uref.field_index = 0;

uref.value = send_data[index];

ioctl(fd, HIDIOCGUCODE, &uref);

ret=ioctl(fd, HIDIOCSUSAGE, &uref);

if(ret != 0 ){

return UNKNOWN_ERROR;

}

}

/* 发送数据*/

rinfo.report_type = HID_REPORT_TYPE_FEATURE;

rinfo.report_id = HID_REPORT_ID_FIRST;

rinfo.num_fields = 1;

ret=ioctl(fd, HIDIOCSREPORT, &rinfo); /* 发送数据*/

if(ret != 0) {

return WRITE_REPORT;

}

/* 接受数据*/

ret = ioctl(fd, HIDIOCINITREPORT, 0);

for(index = 0; index < 72; index++) {

uref.report_type = HID_REPORT_TYPE_FEATURE;

uref.report_id = HID_REPORT_ID_FIRST;

https://www.sodocs.net/doc/1a7661479.html,age_index = index;

uref.field_index = 0;

ioctl(fd, HIDIOCGUCODE, &uref);

ret = ioctl(fd, HIDIOCGUSAGE, &uref);

if(ret != 0 ) {

return UNKNOWN_ERROR;

}

recv_data[index] = uref.value;

}

memcpy(buffer72, recv_data, 72);

return SUCCESS;

}

libusb驱动的实现

int Device_Report(int fd, unsigned char *buffer72)

{

/* 定义设备句柄*/

usb_dev_handle* Device_handle;

/* save the data of send and receive */

unsigned char send_data[72];

unsigned char recv_data[72];

int send_len;

int recv_len;

/* 数据置空*/

memset(send_data, 0 , sizeof(send_data));

memset(recv_data, 0 , sizeof(recv_data));

/* 这里的g_list是全局的数据变量,里面可以存储相关设备的所需信息,当然我们也可以从函数形参中传输进来,设备的信息在打开设备时初始化,我们将在后面的总结中详细描述一下*/

Device_handle = (usb_dev_handle*)(g_list[fd].device_handle);

if (Device_handle == NULL) {

return NOT_OPENED_DEVICE;

}

/* 这个函数前面已经说过,在操作设备前是必须调用的, 0是指用默认的设备*/

usb_claim_interface(Device_handle, 0);

/* 发送数据,所用到的宏定义在usb.h可以找到,我列出来大家看一下

#define USB_ENDPOINT_OUT 0x00

#define USB_TYPE_CLASS (0x01 << 5)

#define USB_RECIP_INTERFACE 0x01

#define HID_REPORT_SET 0x09 */

send_len = usb_control_msg(Device_handle,

USB_ENDPOINT_OUT + USB_TYPE_CLASS + USB_RECIP_INTERFACE,

HID_REPORT_SET,

0x300,

0,

send_data, 72, USB_TIMEOUT);

/* 发送数据有错误*/

if (send_len < 0) {

return WRITE_REPORT;

}

if (send_len != 72) {

return send_len;

}

/* 接受数据

#define USB_ENDPOINT_IN 0x80

#define USB_TYPE_CLASS (0x01 << 5)

#define USB_RECIP_INTERFACE 0x01

#define HID_REPORT_GET 0x01

*/

recv_len = usb_control_msg(Device_handle,

USB_ENDPOINT_IN + USB_TYPE_CLASS + USB_RECIP_INTERFACE,

HID_REPORT_GET,

0x300,

0,

recv_data, 72, USB_TIMEOUT);

if (recv_len < 0) {

printf("failed to retrieve report from USB device!\n");

return READ_REPORT;

}

if (recv_len != 72) {

return recv_len;

}

/* 和usb_claim_interface对应*/

usb_release_interface(RY2_handle, 0);

memcpy(buffer72, recv_data, 72);

return SUCCESS;

}

3.4 关闭设备

假设我们定义的关闭设备的函数名是Device_Close()

/* 使用hid驱动关闭设备*/

int Device_Close()

{

int handle;

h andle = open(“hiddev0”, O_RDONL Y);

/* 传统HID驱动调用,通过close()设备文件就可*/

close( handle );

}

/* 使用libusb关闭驱动*/

int Device_Close()

{

/* LIBUSB 驱动打开设备,这里写的是伪代码,不保证代码有用*/

struct usb_device* udev;

usb_dev_handle* device_handle;

device_handle = usb_open(udev);

/* libusb库使用usb_close关闭程序*/

usb_close(device_handle);

}

libusb的驱动框架

前面我们看了些主要的libusb函数的使用,这里我们把前面的内容归纳下:

一般的驱动应该都包含如下接口:

Device_Find(); /* 寻找设备接口*/

Device_Open(); /* 打开设备接口*/

Device_Write(); /* 写设备接口*/

Device_Read(); /* 读设备接口*/

Device_Close(); /* 关闭设备接口*/

具体代码如下:

#include

/* usb.h这个头文件是要包括的,里面包含了必须要用到的数据结构*/

/* 我们将一个设备的属性用一个结构体来概括*/

typedef struct

{

struct usb_device* udev;

usb_dev_handle* device_handle;

/* 这里可以添加设备的其他属性,这里只列出每个设备要用到的属性*/

} device_descript;

/* 用来设置传输数据的时间延迟*/

#define USB_TIMEOUT 10000

/* 厂家ID 和产品ID */

#define VENDOR_ID 0xffff

#define PRODUCT_ID 0xffff

/* 这里定义数组来保存设备的相关属性,DEVICE_MINOR可以设置能够同时操作的设备数量,用全局变量的目的在于方便保存属性*/

#define DEVICE_MINOR 16

int g_num;

device_descript g_list[ DEVICE_MINOR ];

/* 我们写个设备先找到设备,并把相关信息保存在g_list 中*/

int Device_Find()

{

struct usb_bus *bus;

struct usb_device *dev;

g_num = 0;

usb_find_busses();

usb_find_devices();

/* 寻找设备*/

for (bus = usb_busses; bus; bus = bus->next) {

for (dev = bus->devices; dev; dev = dev->next) {

if(dev->descriptor.idVendor==VENDOR_ID&& dev->descriptor.idProduct == PRODUCT_ID) {

/* 保存设备信息*/

if (g_num < DEVICE_MINOR) {

g_list[g_num].udev = dev;

g_num ++;

}

}

}

}

return g_num;

}

/* 找到设备后,我们根据信息打开设备*/

int Device_Open()

{

/* 根据情况打开你所需要操作的设备,这里我们仅列出伪代码*/

if(g_list[g_num].udev != NULL) {

g_list[g_num].device_handle = usb_open(g_list[g_num].udev);

}

}

/* 下面就是操作设备的函数了,我们就不列出来拉,大家可以参考上面的介绍*/

int DeviceWite(int handle)

{

/* 填写相关代码,具体查看设备协议*/

}

int DeviceOpen(int handle)

{

/* 填写相关代码,具体查看设备协议*/

}

/* 最后不要忘记关闭设备*/

void Device_close(int handle)

{

/* 调用usb_close */

}

小结

到此,使用libusb进行驱动开发介绍完了,通过对库所提供的API的使用可以体会到libusb的易用性。

本人学习abaqus五年的经验总结-让你比做例子快十倍

第二章 ABAQUS 基本使用方法 [2](pp15)快捷键:Ctrl+Alt+左键来缩放模型;Ctrl+Alt+中键来平移模型;Ctrl+Alt+右键来旋转模型。 ②(pp16)ABAQUS/CAE 不会自动保存模型数据,用户应当每隔一段时间自己保存模型以避免意外丢失。 [3](pp17)平面应力问题的截面属性类型是Solid(实心体)而不是Shell(壳)。 ABAQUS/CAE 推荐的建模方法是把整个数值模型(如材料、边界条件、载荷等)都直接定义在几何模型上。载荷类型Pressure 的含义是单位面积上的力,正值表示压力,负值表示拉力。 [4](pp22)对于应力集中问题,使用二次单元可以提高应力结果的精度。 [5](pp23)Dismiss 和Cancel 按钮的作用都是关闭当前对话框,其区别在于:前者出现在包含只读数 据的对话框中;后者出现在允许作出修改的对话框中,点击Cancel 按钮可关闭对话框,而不保存 所修改的内容。 [6](pp26)每个模型中只能有一个装配件,它是由一个或多个实体组成的,所谓的“实体”(instance) 是部件(part)在装配件中的一种映射,一个部件可以对应多个实体。材料和截面属性定义在部件上,相互作用(interaction)、边界条件、载荷等定义在实体上,网格可以定义在部件上或实体上,对求解过程和输出结果的控制参数定义在整个模型上。 [7](pp26) ABAQUS/CAE 中的部件有两种:几何部件(native part)和网格部件(orphan mesh part)。 创建几何部件有两种方法:(1)使用Part 功能模块中的拉伸、旋转、扫掠、倒角和放样等特征来直 接创建几何部件。(2)导入已有的CAD 模型文件,方法是:点击主菜单File→Import→Part。网格部件不包含特征,只包含节点、单元、面、集合的信息。创建网格部件有三种方法:(1)导入ODB 文件中的网格。(2)导入INP 文件中的网格。(3)把几何部件转化为网格部件,方法是:进入Mesh 功能模块,点击主菜单Mesh→Create Mesh Part。 [8](pp31)初始分析步只有一个,名称是initial,它不能被编辑、重命名、替换、复制或删除。在初始分析步之后,需要创建一个或多个后续分析步,主要有两大类:(1)通用分析步(general analysis step)可以用于线性或非线性分析。常用的通用分析步包含以下类型: —Static, General: ABAQUS/Standard 静力分析 —Dynamics, Implicit: ABAQUS/Standard 隐式动力分析 —Dynamics, Explicit: ABAQUS/ Explicit 显式动态分析 (2)线性摄动分析步(linear perturbation step)只能用来分析线性问题。在ABAQUS/Explicit 中 不能使用线性摄动分析步。在ABAQUS/Standard 中以下分析类型总是采用线性摄动分析步。 —Buckle: 线性特征值屈曲。 —Frequency: 频率提取分析。 —Modal dynamics: 瞬时模态动态分析。 —Random response: 随机响应分析。 —Response spectrum: 反应谱分析。 —Steady-state dynamics: 稳态动态分析。 [9](pp33)在静态分析中,如果模型中不含阻尼或与速率相关的材料性质,“时间”就没有实际的物 理意义。为方便起见,一般都把分析步时间设为默认的 1。每创建一个分析步,ABAQUS/CAE 就会自动生成一个该分析步的输出要求。 [10] (pp34)自适应网格主要用于ABAQUS/Explicit 以及ABAQUS/Standard 中的表面磨损过程 模拟。在一般的ABAQUS/Standard 分析中,尽管也可设定自适应网格,但不会起到明显的作用。 Step 功能模块中,主菜单Other→Adaptive Mesh Domain 和Other→Adaptive Mesh Controls 分别 设置划分区域和参数。 [11](pp37)使用主菜单Field 可以定义场变量(包括初始速度场和温度场变量)。有些场变量与分析步有关,也有些仅仅作用于分析的开始阶段。使用主菜单Load Case 可以定义载荷状况。载荷状况由一系列的载荷和边界条件组成,用于静力摄动分析和稳态动力分析。

verilog数字系统设计教程习题答案

verilog 数字系统设计教程习题答案第二章 HDL 既是一种行为描述语言,也是一种结构描述语言。如果按照一定的规则和风格编写代码,就可以将功能行为模块通过工具自动转化为门级互联的结构模块。这意味着利用Verilog 语言所提供的功能,就可以构造一个模块间的清晰结构来描述复杂的大型设计,并对所需的逻辑电路进行严格的设计。 2.模块的基本结构由关键词module和endmodule构成。 3.一个复杂电路系统的完整Verilog HDL 模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。 HDL和VHDL乍为描述硬件电路设计的语言,其共同的特点在于:能形式化地抽象表示电路的结构和行为、支持逻辑设计中层次与领域的描述、可借用高级语言的精巧结构来简化电路的描述、具有电路仿真与验证机制以保证设计的正确性、支持电路描述由高层到低层的综合转换、硬件描述与实现工艺无关(有关工艺参数可通过语言提供的属性包括进去)、便于文档管理、易于理解和设计重用。 5.不是

6.将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。 7.综合工具可以把HDL变成门级网表。这方面Synopsys工具占有较大的优势,它的Design Compile 是作为一个综合的工业标准,它还有另外一个产品叫Behavior Compiler ,可以提供更高级的综合。 另外最近美国又出了一个软件叫Ambit ,据说比Synopsys 的软件更有效,可以综合50万门的电路,速度更快。今年初Ambit 被Cadence 公司收购,为此Cade nee放弃了它原来的综合软件Syn ergy。随着FPGA 设计的规模越来越大,各EDA公司又开发了用于FPGA设计的综合软件,比较有名的有:Sy nopsys 的FPGAExpress,Cade nee 的Syn plity ,Mentor的Leonardo,这三家的FPGA综合软件占了市场的绝大部分。 8.整个综合过程就是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图形描述,依据给定的硬件结构组件和约束控制条件 进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。用于适配,适配将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC Jam格式的 文件 9.在FPGA设计中,仿真一般分为功能仿真(前仿真)和时序仿真(后仿真)。功能仿真又叫逻辑仿真,是指在不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证;而时序仿真是在布局布线后进行,它与

PS教程实例1000例

https://www.sodocs.net/doc/1a7661479.html,/thread-446934-1-1.html Photoshop绘制逼真头发发丝效果 https://www.sodocs.net/doc/1a7661479.html,/thread-446912-1-1.html Photoshop合成在空中漂移的陆地 https://www.sodocs.net/doc/1a7661479.html,/thread-446909-1-1.html Photoshop制作漂亮的紫色水晶字效果 https://www.sodocs.net/doc/1a7661479.html,/thread-446908-1-1.html Photoshop打造梦想效果的背景字教程 https://www.sodocs.net/doc/1a7661479.html,/thread-446900-1-1.html Photoshop简单制作灯光下的黄金字 https://www.sodocs.net/doc/1a7661479.html,/thread-446907-1-1.html Photoshop制作菊花照片马赛克效果 https://www.sodocs.net/doc/1a7661479.html,/thread-446889-1-1.html Photoshop转手绘教程:给玄彬照片转手绘https://www.sodocs.net/doc/1a7661479.html,/thread-446745-1-1.html Photoshop调出男性外景颓废黄调 https://www.sodocs.net/doc/1a7661479.html,/thread-446740-1-1.html Photoshop调色美女模特青褐色效果 https://www.sodocs.net/doc/1a7661479.html,/thread-446737-1-1.html Photoshop使用通道给儿童照去除雀斑 https://www.sodocs.net/doc/1a7661479.html,/thread-446559-1-1.html Photoshop制作唯美效果的风景照 https://www.sodocs.net/doc/1a7661479.html,/thread-446557-1-1.html Photoshop制作印有犀利哥标志的T恤 https://www.sodocs.net/doc/1a7661479.html,/thread-446538-1-1.html Photoshop为照片打造柔美朦胧效果 https://www.sodocs.net/doc/1a7661479.html,/thread-446212-1-1.html Photoshop打造漂亮的镶钻字教程 https://www.sodocs.net/doc/1a7661479.html,/thread-446201-1-1.html Photoshop音画教程:绘制逼真的缝绳效果https://www.sodocs.net/doc/1a7661479.html,/thread-446198-1-1.html Photoshop音画教程:自定义形状缝线制作方法https://www.sodocs.net/doc/1a7661479.html,/thread-446192-1-1.html Photoshop签名教程:灰色魔女动漫成签https://www.sodocs.net/doc/1a7661479.html,/thread-446190-1-1.html Photoshop音画教程:立体边框效果制作https://www.sodocs.net/doc/1a7661479.html,/thread-446187-1-1.html Photoshop加手绘板绘制中国风的美女 https://www.sodocs.net/doc/1a7661479.html,/thread-446159-1-1.html Photoshop把美女照片转成海报效果 https://www.sodocs.net/doc/1a7661479.html,/thread-446172-1-1.html Photoshop制作甜心蛋糕公主签名教程 https://www.sodocs.net/doc/1a7661479.html,/thread-446147-1-1.html Photoshop给视频截图调出亮白艳丽效果https://www.sodocs.net/doc/1a7661479.html,/thread-446140-1-1.html Photoshop简单三步做出照片泛白LOMO风格https://www.sodocs.net/doc/1a7661479.html,/thread-446077-1-1.html Photoshop边框教程:简单制作撒点边框https://www.sodocs.net/doc/1a7661479.html,/thread-446042-1-1.html Photoshop制作破碎的玻璃字教程 https://www.sodocs.net/doc/1a7661479.html,/thread-445950-1-1.html Photoshop制作尘封的记忆古签名 https://www.sodocs.net/doc/1a7661479.html,/thread-445882-1-1.html Photoshop简单的制作蕾丝边框 https://www.sodocs.net/doc/1a7661479.html,/thread-445690-1-1.html Photoshop调出美女水嫩的肌肤效果 https://www.sodocs.net/doc/1a7661479.html,/thread-445678-1-1.html Photoshop为汽车添加闪亮的车灯效果 https://www.sodocs.net/doc/1a7661479.html,/thread-445672-1-1.html Photoshop调出清爽色调的海滩照片 https://www.sodocs.net/doc/1a7661479.html,/thread-445656-1-1.html Photoshop制作炫彩的花纹文字特效 https://www.sodocs.net/doc/1a7661479.html,/thread-445565-1-1.html Photoshop调出照片的复古怀旧色 https://www.sodocs.net/doc/1a7661479.html,/thread-445561-1-1.html Photoshop轻松打造MM水清纯靓丽肌肤https://www.sodocs.net/doc/1a7661479.html,/thread-445511-1-1.html Photoshop调出人物的淡雅粉嫩肤色教程https://www.sodocs.net/doc/1a7661479.html,/thread-445488-1-1.html Photoshop+IR制作花瓣飘落GIF动态效果https://www.sodocs.net/doc/1a7661479.html,/thread-445480-1-1.html Photoshop制作墙上的霓虹灯文字效果 https://www.sodocs.net/doc/1a7661479.html,/thread-445475-1-1.html Photoshop制作美女照片漂亮的素描风格https://www.sodocs.net/doc/1a7661479.html,/thread-445465-1-1.html Photoshop制作真实的建筑物雪景效果 https://www.sodocs.net/doc/1a7661479.html,/thread-445441-1-1.html Photoshop打造美女迷人的眼妆 https://www.sodocs.net/doc/1a7661479.html,/thread-445428-1-1.html Photoshop快速给人物加上闪亮的蜜唇 https://www.sodocs.net/doc/1a7661479.html,/thread-445422-1-1.html Photoshop巧用匹配颜色校正偏黄色照片https://www.sodocs.net/doc/1a7661479.html,/thread-444870-1-1.html Photoshop制作汤姆克鲁斯的阿凡达特效https://www.sodocs.net/doc/1a7661479.html,/thread-444407-1-1.html Photoshop曲线工具基础教程:色彩对比 https://www.sodocs.net/doc/1a7661479.html,/thread-444406-1-1.html Photoshop色阶实例教程:调整照片色彩明暗度https://www.sodocs.net/doc/1a7661479.html,/thread-444071-1-1.html Photoshop调色教程:人物淡彩及美白教程https://www.sodocs.net/doc/1a7661479.html,/thread-444069-1-1.html Photoshop绘制真实的香水瓶效果 https://www.sodocs.net/doc/1a7661479.html,/thread-444007-1-1.html Photoshop打造简单的彗星划过效果 https://www.sodocs.net/doc/1a7661479.html,/thread-444003-1-1.html Photoshop保持肤色细节给人物美白 https://www.sodocs.net/doc/1a7661479.html,/thread-444002-1-1.html Photoshop设计一个简洁灰色系的网页模板https://www.sodocs.net/doc/1a7661479.html,/thread-444001-1-1.html Photoshop简单调出人物质感铜色效果 https://www.sodocs.net/doc/1a7661479.html,/thread-443999-1-1.html Photoshop随心随遇制作人物阿凡达效果https://www.sodocs.net/doc/1a7661479.html,/thread-443997-1-1.html Photoshop制作滚动显示的文字GIF动态效果https://www.sodocs.net/doc/1a7661479.html,/thread-443955-1-1.html Photoshop调出黄转粉色调 https://www.sodocs.net/doc/1a7661479.html,/thread-443791-1-1.html Photoshop照片转手绘之头发的画法教程https://www.sodocs.net/doc/1a7661479.html,/thread-443789-1-1.html巧用Photoshop随心所欲给汽车皮肤换颜色

ps工具使用入门教程

PS工具使用入门教程 想要用好Photoshop,首先要了解Photoshop中最常用到的工具箱。Photoshop的工具箱就像是一个百宝箱,它里面提供了几乎所有能够辅助我们进行各种操作的有用的工具。 图1-1- 2 1、轻松学会基本工具的使用 工具箱中的工具大致可以分为:选择工具、绘图工具、路径工具、文字工具、切片工具以及其它类的工具,此外还有一些提供独立控制功能的按钮和选项。由于不同的工具使用起来的基本方法和原理都差不多,这里举一个简单的例子让大家对工具箱的使用有一个大致的了解,在这个例子中我们将使用“选择工具”和“绘图工具”来制作一个立体球,一起来看看怎么做的吧! 步骤1 新建一个图像文件 首先我们创建一个新的图像文件。执行【文件】|【新建】命令打开【新建图像】文件对话框,在“名称”中填入图像的“名称”为“立体球”;将“宽度”和“高度”都设置为400;分别在右边的下拉框中选择单位为“像素”;在“模式”中选择图像的色彩“模式”为我们通常使用的“RGB 颜色”模式(如图1-1-4所示)。其它为默认设置,单击【好】按钮,这样一个新的图像文件就建好了。

图1-1- 4 图1-1- 5 步骤2 建立一个圆形选区 接着来制作一个圆形选区。选区的制作是Photoshop中常用到的操作,通过设定选区我们可以指定对图像处理的范围。如本例将要制作一个实心的圆形,那么先用选区来指定这个圆形的范围,下面我们就来看看怎样使用【椭圆选框工具】来制作一个正圆选区。首先要选中【椭圆选框工具】,在一般情况下,我们可以通过用鼠标点击工具箱中相应的工具图标来选中我们需要的工具,可是在Photoshop中有些工具在默认状态下是隐藏起来的,比如椭圆选框工具。我们可以在相应的工具图标上按住鼠标左键并停留一会直到弹出一个选择列表(如图1-1-6所示),这时将鼠标移动到列表中相应的工具图标上点击,我们就可以选择那些被隐藏起来的工具了,效果如图1-1-7所示。 图1-1- 6 图1-1- 7

ABAQUS实例分析(可编辑修改word版)

《现代机械设计方法》课程结业论文 ( 2011 级) 题目:ABAQUS 实例分析 学生姓名XXXX 学号XXXXX 专业机械工程 学院名称机电工程与自动化学院 指导老师XX 2013 年 5 月8 日

目录 第一章Abaqus 简介 (1) 一、Abaqus 总体介绍 (1) 二、Abaqus 基本使用方法 (2) 1.2.1Abaqus 分析步骤 (2) 1.2.2Abaqus/CAE 界面 (3) 1.2.3Abaqus/CAE 的功能模块 (3) 第二章基于Abaqus 的通孔端盖分析实例 (4) 一、工作任务的明确 (4) 二、具体步骤 (4) 2.2.1启动Abaqus/CAE (4) 2.2.2导入零件 (5) 2.2.3创建材料和截面属性 (6) 2.2.4定义装配件 (7) 2.2.5定义接触和绑定约束(tie) (10) 2.2.6定义分析步 (14) 2.2.7划分网格 (15) 2.2.8施加载荷 (19) 2.2.9定义边界条件 (20) 2.2.10提交分析作业 (21) 2.2.11后处理 (22) 第三章课程学习心得与作业体会 (23)

第一章: Abaqus 简介 一、 Abaqus 总体介绍 Abaqus 是功能强大的有限元分析软件,可以分析复杂的固体力学和结构力学系统,模拟非常庞大的模型,处理高度非线性问题。Abaqus 不但可以做单一零件的力学和多物理场的分析,同时还可以完成系统级的分析和研究。 Abaqus 使用起来十分简便,可以很容易的为复杂问题建立模型。Abaqus 具备十分丰富的单元库,可以模拟任意几何形状,其丰富的材料模型库可以模拟大多数典型工程材料的性能,包括金属、橡胶、聚合物、复合材料、钢筋混泥土、可压缩的弹性泡沫以及地质材料(例如土壤、岩石)等。 Abaqus 主要具有以下分析功能: 1.静态应力/位移分析 2.动态分析 3.非线性动态应力/位移分析 4.粘弹性/粘塑性响应分析 5.热传导分析 6.退火成形过程分析 7.质量扩散分析 8.准静态分析 9.耦合分析 10.海洋工程结构分析 11.瞬态温度/位移耦合分析 12.疲劳分析 13.水下冲击分析 14.设计灵敏度分析 二、 Abaqus 基本使用方法 1.2.1Abaqus 分析步骤 有限元分析包括以下三个步骤: 1.前处理(Abaqus/CAE):在前期处理阶段需要定义物理问题的模型,并生 成一个 Abaqus 输入文件。提交给 Abaqus/Standard 或 Abaqus/Explicit。 2.分析计算(Abaqus/Standard 或 Abaqus/Explicit):在分析计算阶段, 使用 Abaqus/Standard 或Abaqus/Explicit 求解输入文件中所定义的

system verilog教程

SystemVerilog Tutorials 下面的手册会帮助你了解一些SystemVerilog中最重要的新特点。手册还提供了一些代码样本和例子使你可以对语言有更好"感觉"。这些辅导假设你们已经了解了一些Verilog语言。如果没有,你可以先去看看Verilog设计者指南(V erilog Designer’s Guide)。 * Data types * RTL design * Interfaces * Clocking * Assertion-based verification * Classes * Testbench automation and constraints * The Direct Programming Interface (DPI) SystemVerilog 的数据类型 这个手册将描述Systemverilog新引进的数据类型。他们大多数都是可以综合的,并且可以使RTL级描述更易于理解和书写。 整型和实型 SystemVerilog引进了几种新的数据类型。C语言程序员会熟悉其中的大多数。引进新的数据类型构思是这样的,如果C语言和SystemVerilog有相同的数据类型可以使C语言算法模型更容易的转化为SystemVerilog模型。 Verilog的变量类型有四态:既是0,1,X,Z。SystemVerilog引进了新的两态数据类型,每一位只可以是0或是1。当你不需要使用的X和Z值时,譬如在写Testbench和做为for语句的循环变量。使用两态变量的RTL级模型,可以使模拟器更有效率。并且使用得当的话将不会对综合结果产生影响。 二态整型 类型描述例子 Bit user-defined size bit [3:0] a_nibble; Byte 8 bits, unsigned byte a, b; Shortint 16 bits, signed shortint c, d; Int 32 bits, signed int i,j; Longint 64 bits, signed longint lword;

Photoshop基础入门教程

Photoshop入门教程 第一课: 这是一个PS高手的体会,希望能对大家有所启迪。 1.不要看到别人的作品第一句话就说:给个教程吧!你应该想这个是怎么做出来的。当你自己想出来,再对照别人的教程的时候,你就知道自己和别人的思路的差异 2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久PS,都是只对部分功能熟悉而已,不系统还是不够的 3.看help,不要因为他们很难而我们自己是初学者所以就不看;帮助永远是最好的参考手册,虽然帮助的文字有时候很难看懂,总觉得不够直观 4.不要被蒙版,通道等词汇所迷惑;通道就是选区,呵呵 5.不要放过任何一个看上去很简单的小问题——他们往往并不那么简单,或者可以引伸出很多知识点;不会举一反三你就永远不等于会了PS 6.会用PS处理相片,并不说明你会设计; 7.学PS并不难,AI,CD等等也不过如此——难的是长期坚持实践和不遗余力的博览群书; 8.看再多PS的书,是学不全PS的,要多实践

浮躁的人容易问:我到底该学什么;——别问,学就对了; 浮躁的人容易问:PS有钱途吗;——建议你去抢银行; 浮躁的人容易说:我要中文版!我英文不行!——不行?学呀! 浮躁的人分两种:a)只观望而不学的人;只学而不坚持的人; 9.把时髦的技术挂在嘴边,还不如把过时的技术记在心里; 10.学习PS最好的方法之一就是多练习; 11.在任何时刻都不要认为自己手中的书已经足够了; 12.看得懂的书,请仔细看;看不懂的书,请硬着头皮看; 13.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍; 14.请把书上的例子亲手到电脑上实践,即使配套光盘中有源文件; 15.把在书中看到的有意义的例子扩充;并将其切实的运用到自己的工作中; 16.不要漏掉书中任何一个练习——请全部做完并记录下思路; 17.当你用PS到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和工作; 18.别心急,用PS确实不容易;水平是在不断的实践中完善和发展的;

Quartus-II使用教程-完整实例2

Quartus Ⅱ入门教程 (一个Verilog 程序的编译和功能仿真) Quartus Ⅱ 是Altera 公司推出的专业EDA 工具,支持原理图输入、硬件描述语言的输入等多种输入方式。硬件描述语言的输入方式是利用类似高级程序的设计方法来设计出数字系统。接下来我们对这种智能的EDA 工具进行初步的学习。使大家以后的数字系统设计更加容易上手。 ● 快捷工具栏:提供设置(setting ),编译(compile )等快捷方式,方便用户使用,用户也可以在菜单栏的下拉菜单找到相应的选项。 ● 菜单栏:软件所有功能的控制选项都可以在其下拉菜单中找到。 ● 信息栏:编译或者综合整个过程的详细信息显示窗口,包括编译通过信息和报错信息。

1 工程名称: 2添加已有文件(没有已有文件的直接跳过next)

3 选择芯片型号(我们选择cylone II 系列下的EP2C70F896C6芯片) (注:如果不下载到开发板上进行测试,这一步可以不用设置) 4 选择仿真,综合工具(第一次实验全部利用quartus 做,三项都选None ,然后next )

5 工程建立完成(点finish )

第三步:添加文件(file>new> VHDL file),新建完成之后要先保存。 第四步:编写程序 以实现一个与门和或门为例,Verilog描述源文件如下: module test(a,b,out1,out2); input a,b; output out1,out2; assign out1=a&b; assign out2=a | b; endmodule 然后保存源文件; 第五步:检查语法(点击工具栏的这个按钮(start Analysis & synthesis))

Abaqus学习笔记

Abaqus学习笔记 Abaqus 使用日记Abaqus 标准版共有“部件(part)”、“材料特性(propoterty)”、“装配(assemble)”、“计算步骤(step)”、“交互(interaction)”、“加载(load)”、“单元划分(mesh)”、“计算(job)”、“后处理(visualization)”、“草图(sketch)”十大模块组成。建模方法:一个模型(model)通常由一个或几个部件(part)组成,部件又由一个或几个特征体(feature)组成,每一个部分至少有一个基本特征体(base feature),特征体可以是所创建的实体,如挤压体、切割挤压体、数据点、参考点、数据轴、数据平面、装配体的装配约束、装配体的实例等等。1.首先建立部件 (1)根据实际模型的尺寸决定部件的近似尺寸,进入绘图区。绘图区根据所输入的近似尺寸决定网格的间距,间距大小可以在edit菜单sketcher options 选项里调整。 (2)在绘图区分别建立部件中的各个特征体,建立特征体的方法主要有挤压、旋转、平扫三种。同一个模型中两个不同的部件可以有同名的特征体组成,也就是说不同部件中可以有同名的特征体,同名特征体可以相同也可以不同。部件的特征体包括用各种方法建立的基本特征体、数据点(datum point)、数据轴(datum axis)、数据平面(datum plane)等等。 (3)编辑部件可以用部件管理器进行部件复制,重命名,删除等,部件中的特征体可以是直接建立的特征体,还可以间接手段建立,如首先建立一个数据点特征体,通过数据点建立数据轴特征体,然后建立数据平面特征体,再由此基础上建立某一特征体,最先建立的数据点特征体就是父特征体,依次往下分别为子特征体,删除或隐藏父特征体其下级所有子特征体都将被删除或隐藏。特征体被删除后将不能够恢复,一个部件如果只包含一个特征体,删除特征体时部件也同时被删除。 2.建立材料特性 (1)输入材料特性参数弹性模量、泊松比等 (2)建立截面(section)特性,如均质的、各项同性、平面应力平面应变等等,截面特性管理器依赖于材料参数管理器 (3)分配截面特性给各特征体,把截面特性分配给部件的某一区域就表示该区域已经和该截面特性相关联 3.建立刚体 (1)部件包括可变形体、离散刚体和解析刚体三种类型,在创建部件时需要指定部件的类型,一旦建立后就不能更改其类型。采用旋转方式建立部件,在绘制轴对称部件的外形轮廓时不能超过其对称轴。

Verilog的135个经典设计实例

【例3.1】4位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule 【例3.2】4位计数器 module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[3:0] out; always @(posedge clk) begin if (reset) out<=0; //同步复位 else out<=out+1; //计数 end endmodule 【例3.3】4位全加器的仿真程序 `timescale 1ns/1ns `include "adder4.v" module adder_tp; //测试模块的名字 reg[3:0] a,b; //测试输入信号定义为reg型 reg cin; wire[3:0] sum; //测试输出信号定义为wire型 wire cout; integer i,j; adder4 adder(sum,cout,a,b,cin); //调用测试对象 always #5 cin=~cin; //设定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<16;i=i+1) #10 a=i; //设定a的取值 end - 1 -

initial begin for(j=1;j<16;j=j+1) #10 b=j; //设定b的取值 end initial//定义结果显示格式 begin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum); #160 $finish; end endmodule 【例3.4】4位计数器的仿真程序 `timescale 1ns/1ns `include "count4.v" module coun4_tp; reg clk,reset; //测试输入信号定义为reg型 wire[3:0] out; //测试输出信号定义为wire型 parameter DELY=100; count4 mycount(out,reset,clk); //调用测试对象 always #(DELY/2) clk = ~clk; //产生时钟波形 initial begin//激励信号定义 clk =0; reset=0; #DELY reset=1; #DELY reset=0; #(DELY*20) $finish; end //定义结果显示格式 initial $monitor($time,,,"clk=%d reset=%d out=%d", clk, reset,out); endmodule 【例3.5】“与-或-非”门电路 module AOI(A,B,C,D,F); //模块名为AOI(端口列表A,B,C,D,F) input A,B,C,D; //模块的输入端口为A,B,C,D output F; //模块的输出端口为F - 2 -

PS教程:Photoshop自学完整版(全面详解)

Photoshop基础知识学习 一、Photosop是ADOBE公司推出的图形图像处理软件,功能强大,广泛应用于印刷、广告设计、封面制作、网页图像制作、照片编辑等领域。利用Photosop可以对图像进行各种平面处理。绘制简单的几何图形、给黑白图像上色、进行图像格式和颜色模式的转换。 二、Photosop7.0的启动与退出 1、启动Photoshop的方法: 单击开始/程序/Photoshop7.0即可启动.或者打开一个Photoshop文件也能够启动Photoshop. 2、退出Photoshop的方法: 单击关闭按钮或按下CTRL+Q组合键或ALT+F4组合键,都可以退出Photoshop。 三、Photoshop的窗口组成(标题栏、菜单栏、工具栏、工具箱、图像图口、控制面板、状态栏、Photoshop桌面) 1、标题栏:位于窗口最顶端。 2、菜单栏:其中包括9个菜单。位于标题栏下方。 3、工具栏:位于菜单栏下方。可以随着工具的改变而改变。 4、工具箱:位于工具栏的左下方。 5、图像窗口:位于工具栏的正下方。用来显示图像的区域,用于编辑和修改图像。 6、控制面版:窗口右侧的小窗口称为控制面版。用于改变图象的属性。 7、状态栏:位于窗口底部,提供一些当前操作的帮助信息。 8、Photoshop桌面:Photoshop窗口的灰色区域为桌面。其中包括显示工具箱、控制面板和图像窗口。 四、图像窗口:图像窗口由(标题栏、图像显示区、控制窗口图标) 1、标题栏:显示图像文件名、文件格式、显示比例大小、层名称以及颜色模式。 2、图像显示区:用于编辑图像和显示图像。 3、控制窗口图标:双击此图标可以关闭图像窗口。单击此图标,可以打开一个菜单,选择其中的命令即可。 五、工具箱和工具栏 Photosop工具包含了40余种工具,单击图标即可选择工具或者按下工具的组合键。工具箱中并没有显示出全部的工具,只要细心观察,会发现有些工具图标中有一个小三角的符号,这就表示在该工具中还有与之相关的工具。打开这些工具的方法有两种: 1、把鼠标指针移到含有三角的工具上,右击即可打开隐藏的工具或者按鼠标左键不放在工具上开隐藏稍等片刻也可打工具。然后选择工具即可。 2、可以按下ALT键不放,再单击工具图标,多次单击可以在多个工具之间切换。 六、控制面板 控制面板可以完成各种图像处理操作和工具参数设置,Photosop7.0中共提供了14个控制面板。其中包括:导般器、信息、颜色、色板、图层、通道、路径、历史记录、动作、工具预设、样式、字符、段落控制面板和状态栏。 1、导般器(Nanigator):用来显示图像上的缩略图,可用缩放显示比例,迅速移动图像的显

abaqus实例

一.创建部件 1.打开abaqus; 开始/程序/Abaqus6.10-1/Abaque CAE 2.Model/Rename/Model-1,并输入名字link4

3.单击Create part弹出Create part对话框, Name输入link-4; Modeling Space 选择2D Planar Type 选择Deformable Base Feature 选择Wire Approximate size 输入800;然后单击continue 4.单击(Create Lines:connected)通过点(0,0)、(400,0)、(400,300)、(0,300)单击(Create Lines:connected)连接(400,300)和(0,0)两点,单击提示区中的Done按钮(或者单击鼠标滚轮,也叫中键),形成四杆桁架结构

5.单击工具栏中的(Save Model Database),保存模型为link4.cae 二.定义材料属性 6.双击模型树中的Materials(或者将Module切换到Property,单击Create Material -ε) 弹出Edit Material对话框后。 执行对话框中Mechanical/Elasticity/Elastic命令, 在对话框底部出现的Data栏中输入Young’s Module为29.5e4, 单击OK.完成材料设定。

7.单击“Create Section ”,弹出Create Section对话框, Category中选择Beam; Type中选择Truss; 单击continue按钮 弹出Edit Section对话框, 材料选择默认的Material-1,输入截面积(Cross-sectional area)为100,单击ok按钮。

PS经典实例教程

用Photoshop从无到有绘制一种仿真的水纹效果。 新建500*500像素的RGB模式文件。快捷键D把前景色设置为黑,背景色设置为白。[滤镜]―[渲染]―[云彩],[滤镜]―[模糊]―[径向模糊],数量23,模糊方法―旋转,品质―最好,[滤镜]―[模糊]―[高斯模糊]5.5,[滤镜]―[素描]―[基底凸现],细节12,平滑度10,光照方向―底,[滤镜]―[素描]―[铬黄]细节7,平滑度4,[滤镜]―[扭曲]―[旋转扭曲],角度120,[滤镜]―[扭曲]―[水波],数量12%,起伏5,按快捷键CTRL+U或者[图像]―[调整]―[色相/饱和度]命令,在弹出的对话框中选择着色,色相调整为205,饱和度为55。得到最终结果。 利用PS画笔模拟在水雾玻璃上写字 打开雨滴玻璃素材,进行色相/饱和度调整,色相10,饱和度35。执行图象--调整-去色。图象-图象大小,将背景图象改为600*450.拉入汽车素材图,改模式为叠加。将背景素材图进行滤镜--模糊--高斯模糊5.5。后设置画笔 在所有图层上新建图层“字体”,用黑色画笔写出字体。用15px的画笔画出墨迹滴落的感觉。在所有图层上新建图层编辑填充白色,改模式为柔光,不透明度55%。、最后我们将字体图层的不透明度改为85%。 Photoshop制作华丽的花纹黄金字 新建一1280×1024像素的文件。设置前景色#6a000c,背景色#111111。选择渐变工具,选择前景色到背景渐变,径向渐变。后从文档中心拖动到其中一个角

落来创建渐变。 用文字工具,创建文字,颜色#f9df78。复制文字图层两次,第二个副本的填充值改为0。双击文字图层应用如下图层样式。斜面和浮雕:样式“描边浮雕”,深度250 ,光泽等高线选择环形—双,勾选消除锯齿,高光模式为“线性光”,阴影模式颜色#96794b。理:选择素材图案,可先存下图的纹理素材,打开后定义为图案。

abaqus实例详细过程(铰链) 免费

铰链 一、创建部件 1、进入部件模块。。点击创建部件。 命名为Hinge-part,其他的选项选择如右下图所示。点击 “继续”,进入绘图区。 2、点击,在绘图区绘一个矩形。再点击,将尺寸改为 0.04*0.04。单击鼠标中键。 3、在弹出的对话框中输入0.04作为拉伸深度。点击”确定”。 4、点击创建拉伸实体,点击六面体的一个面,以及右侧的边。进入到绘图区域。 5、如下图那样利用创建三条线段。利用将两条横线都改为0.02mm长。 6、选择,做出半圆。 7、点击,以半圆的圆心为圆心,做圆。 8、点击为圆标注尺寸。输入新尺寸0.01。 9、在弹出的对话框里输入拉伸深度为0.02,拉伸方向:翻转。点击“确定”。 10、在模型树的部件里,选择圆孔部件。右击,编辑。将内孔直径改为0.012.。确定。

创建润滑孔 1、进入草图模块。创建名为hole的草图。如右图所示。单击“继续”。 2、单击做一个直径为0.012的圆。单击鼠标中键。进入部件模块。 3、选择主菜单栏的工具→基准。对话框选择格式如下图所示。 选择半圆形边。参数设为0.25。。单击中键,点就建好了。软件提示选择一个轴。那么,我们就创建一个基准轴。如上图右侧所示。选择刚刚建好的那一点以及圆孔的中心,过这两点创建一个轴。再在基准处点击如下图所示,选择刚刚建好的点和轴,那么面也就建好了。

4、点击,视图左下角的显示区显示,选择上一步中创建的基准面,再选一个边。如图所示。进入绘图区。 6、导入之前绘制的小润滑孔hole。利用将孔移植所需位置。单击中键。选择正确的翻 转方向。对话框按右下图设置。确定。 7、将部件的名称改成hinge-hole,并复制一个命名为hinge-solid。 将hinge-solid的模型树张开,删除其下的特征,即该部件不带孔。 8、创建第三个部件:刚体销。 点击创建部件按钮,命名为pin,解析刚体,旋转壳。具体见下图所示。单击“继 续”,在出现的旋转轴右侧画一条垂直向下的直线。用将该直线的长度改为0.06,与旋转轴的距离为0.012,点击确定,界面出现旋转之后的销。

华为verilog教程

1.0 41 HDL Verilog HDL () 2004.8.3 yyyy/mm/dd

Verilog HDL 2004.8.3 1.00 2004-08-16241

28 5 ..............................................................274.8 case ..........................................................254.7 ..........................................................254.6.6 ....................................................254.6.5 ....................................................244.6.4 ................................................234.6.3 ....................................................224.6.2 ....................................................214.6.1 . (21) 4.6 .....................................................204.5.2 ...................................................204.5.1 (20) 4.5 ..........................................................184.4.2 .........................................................184.4.1 . (18) 4.4 ........................................................184.3 .............................................................174.2 .............................................................174.1.3 ..................................................174.1.2 .......................................................174.1.1 (17) 4.1 (17) 4 Verilog HDL (16) 3.3.4 ..................................................153.3.3 ..................................................143.3.2 ................................................123.3.1 (12) 3.3 ......................................................113.2 .............................................................113.1.3 ......................................................103.1.2 ....................................................93.1.1 . (9) 3.1 (9) 3 Verilog HDL (7) 2.4.2 ..........................................................72.4.1 . (7) 2.4 Verilog HDL .....................................................62.3 .........................................................62.2 .......................................................52.1 . (5) 2 HDL ......................................................51 ................................................................... Verilog HDL 2004-08-16 341

相关主题