Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
Please send me 3 choises of priority hours. A weekday is divided into 3 segments: 9.30-13:30, 13:30-17:30 and 17:30-21:30. Weekends are "first come first served". So don't choose saturday or sunday. Among these 3 choices, 2 of them will be your priority hours. Priority hours should be determined before you can access to lab. So the deadline is 16 Oct Friday.
There will be cadence tutorial presentation on 19 Oct Monday at 17:30 and 22 Oct Thursday at 12:30. In this presentation I will show the very basics of Cadence schematic editor and layout tools. A quick review of [[first tutorial|Tutorials]] will be helpful.
If you have any questions don't hesitate to ask me. You can see me in person in DZ-15 or send an e-mail to ''akcoren@mems.eee.metu.edu.tr''
[[Here|dr_xc06_v3_1.pdf]] is the design rule specification file. You can look the DRC rules in detail. Starting from page 31, the drc rules are listed. If you get an DRC error, you can search this document with the error code and find more explanation about the error.
Assignment 1-2 grades are posted. You can check from [[here|https://www.mems.eee.metu.edu.tr/~akcoren/ee413_grade_list.xls]].
Laboratory Priority Table is ready. You can get it from [[here|ee413_priority_hours.pdf]]. If you haven't submitted your choices yet, you can still submit. Priority hours ''doesn't'' mean you can only use lab in your priority hours. If there are available computers, you can use them anytime.
For any question: ''akcoren@mems.eee.metu.edu.tr''
You can find assignment 1-1 grades at [[here|https://www.mems.eee.metu.edu.tr/~akcoren/ee413_grade_list.xls]]. All of you prepared very good reports. Don't forget to explain which waveforms are input, output etc...
By the way, I prepared a FAQ for the course. Please read it from [[here|FAQ]].
Your first assignment has two deadlines for its two parts.
First part is the schematic drawing and transient simulation. You are expected to complete that part and send a report to ''akcoren (at) mems.eee.metu.edu.tr'' until 30.10.2009. Your reports should include the screenshots of the circuits you have constructed and the simulation results.
The deadline for second part is 06.11.2009.
Laboratory keys are ready. You can take them from me in DZ-15. You cannot take keys for your friends. I will also give you your usernames and passwords when you come. So everything is ready to begin the assignments. Remember there is no start date for assignments, only due date. Please check the [[schedule|Schedule]].
Since you begin using the laboratory, there are some regulations you should now.
* Only the people having access can use the laboratory.
* Laptops are NOT allowed.
* You must close the door when you exit the laboratory.
* Copying of laboratory keys are STRICTLY forbidden.
I send your user names and passwords to your mail addresses. If you haven't received the mail or you cannot login please let me know.
Web site is working and it is up to date.
I updated the priority hours. You can get it from [[here|ee413_priority_hours.pdf]].
For assignment 2, you ''can'' use the process specification file of XFAB 0.6 um process. You can download it from [[here|ps_xc06_v3_0.pdf]].
!Design of a CMOS inverter
''Due date: 06.11.2009''
As the 1st laboratory work, you will complete the first tutorial on [[tutorials|Tutorials]] page. Download the pdf file and follow the instructions one by one. By following the tutorials, you will learn:
*starting Cadence,
*capturing schematics,
*simulating schematics,
*drawing layouts,
*simulating layouts,
*and carring out DRC and LVS checks.
Send your report in pdf format to ''akcoren (at) mems.eee.metu.edu.tr'' with subject "~EE413HW1" when you completed the whole work. The time that I got the email will be your submission time. Do not forget to answer the questions in the tutorial. In Open Office you can convert your report to a pdf document by File->Export as pdf.
''Design of a CMOS inverter and 2-input NAND gate using Standard Cell Design''
In this assignment, you will learn Standard Cell Design Concept, and you will design two digital cells using this concept: an inverter and a 2-input NAND gate. Although you have designed an inverter in the previous laboratory, you will redesign it with the specs given below.
''Step 1.'' Read the tutorial in the [[tutorials|Tutorials]] page for 2nd laboratory work, which is on standard cell design concepts. Make sure that you understood the idea. Do not start step 2 unless everything is clear about standard cell design concept.
''Step 2.'' ''Inverter''
In this step, you will again work on a CMOS inverter, but this time you will design the circuit according to the specs given below, and you will draw a layout obeying the standard cell design rules. You may copy the schematics and symbol views from the previous lab's work, but you will certainly draw the layout from the beginning.
''a.'' Create a new cell with name "INV".
''b.'' Draw (or copy from the previous work) the schematics of the circuit, and create (or copy) the symbol view.
''c.'' While keeping L=0.8u for all the transistors, adjust W values such that:
* The inverter can drive 1pF load at 50 Mhz with rise and fall times smaller than 5 ns.
* The input/output characteristic is symmetric (Vm = VDD/2).
* The transistor dimensions should be as small as possible (while satisfying the requirements above) in order to minimize the input capacitance of the inverter.
During design, you may prefer conducting some paper/pencil calculations firstly, and then change the values in order to adjust the mid-point precisely. Of course, you will be simulating the circuit for a few times. You will need conducting DC simulation which is described in the tutorial.
''d.'' Once the schematic is completed, follow the same steps as you did in the previous laboratory: i.e. Draw layout, do DRC check, generate extracted view, do LVS, and carry out post-layout simulations.
''e.'' Measure the dynamic power dissipation of the circuit (post layout) for a load of 0.1 pF @ 10Mhz, 1pF @ 1Mhz, and 1pF @ 50Mhz. Dynamic power dissipation calculation is also added to the tutorial.
''Step 3.'' ''2-Input NAND Gate''
''a.'' Create a new cell with name "NA2".
''b.'' Design your circuit such that your NAND gate satisfies the requirements for the inverter (above) for the worst case. Symmetric input/output characteristics should be satisfied when two inputs are connected together.
''c.'' Follow the steps ''2.d'' and ''2.e''.
''Step 4.'' ''Reports''
You are expected to prepare a short report about assignment 2. This report will include the followings:
* How did you find the aspect ratios? Paper/pencil calculations? Try-and-cry methods? Give details.
* Show that both of the cells work for all input combinations (i.e. give simulation snapshots).
* Show that the design specifications are met by showing the simulation snapshot (include the markers). Include the simulation circuit's snapshot also.
* ''Give snapshots of schematic, layout, extracted views and LVS output.'' Schematic views should be backannotiated.
* How did you simulate the power dissipation?
* Find the max working frequency of both circuits when 20 of similar gates are connected as load. How did you calculate the load? How can you find the worst case for the nand gate?
You are encouraged to add any comments you think as important. This report will contain totally 1-2 pages of written part, and many snapshots.
''Design of 2-input NOR, 3-input NAND, and 4-input NAND''
In this assignment, you will design 2-input NOR, 3-input NAND, and 4-input NAND gates using standard cell design guidelines.
''a.'' Use these cell names: NO2, NA3, NA4.
''b.'' While keeping L=0.6u for all the transistors, adjust W values such that input/output characteristics are symmetric (when all inputs are shorted).
''Reports''
You will send a report including ''only'' the simulation results showing the symmetric input/output characteristic and the circuit screenshots (both schematic and layout). Of course, do not forget to label the figures.
''An Edge Triggered D Flip - Flop with Asynchronous Reset''
You will design an edge triggered D Flip - Flop with asynchronous reset. The circuit to be designed will be chosen by you. Simpler designs are preffered. Do not forget that the design kit's digital cells are designed, implemented, and proved that they are working. They are all in D_CELLS library. You can check the DFF gates in D_CELLS to have an idea about the schematic of the circuits. You may also consider dynamic flip-flop structure, but you should be careful with the design of these circuits.
* Make sure that you understand the operation of the circuit very well.
* Your circuit should have these pins: D, CLK, R (or RN), Q, QN
* If you have time, and thirsty to extra grades, you can add set input to the circuit.
''Layout Issues''
There are two ways to draw the layout. The first one is standard-cell design method, which is the one you used in the previous assignments. The second method is the hieararchical method, which is the use of standard cells, and connect them properly. You will use hierarchical method in this assignment. You can also use standard cell design method, however this may take really long time.
* You will use your own gates implemented previously. You cannot use D_CELLS library.
* Place the cells horizontally in a single row only.
* Use metal-1 layer for horizontal lines, and metal-2 for vertical lines
* The D, CLK, RN, Q, and QN pins should be accessible from the top and bottom of the design. Avoid direct connections with metal-2 horizontally between any adjacent cells. However, you can use horizontal metal-1 connections between adjacent cells. All the other cell connections should be done on top or bottom of the cell area with horizontal and vertical routing layers of minimum widths. At this time you may argue that the cell height will be larger as compared to INV, or NA2 cells. But do not worry, this DFA cell is not a standard cell, but it is a block constructed using standard cells. But as in any VLSI design, try to minimize the routing area by selecting a most proper placement. Here, "Placement" refers the arragement of which cell should placed where in the DFA layout design.
[[Here|hierarchy1.png]], a sample view is given. It is not the design of a DFA cell, the purpose of this figure is to make familiar how your hierachical DFA design should look like.
''Reports''
A very short report will be prepared.
* Explain the operation of the circuit clearly
* Prove that the circuit operates in the way that you want, with proper simulations.
* Give snapshots of schematics, layout, and extracted views.
''An 8-bit syncronous counter with parallel load and asynchronous reset''
In this laboratory, you will design an 8-bit synchronous counter with parallel load and asynchronous reset.
''Inputs:'' ENB (enable), L (load), RN (active low reset), CLK (clock), D<7:0> (data)
''Outputs:'' CNT <7:0> (8 bit counter output), COUT (output carry).
What you will design in this lab is basically an 8-bit synchronous counter. When the reset is low (''RN''), all the bits are reset. When reset is 1, synchronous operation will be performed depending on the enable input. When (''ENB'') enable is 0, all the ''DFA'' outputs keep their previous states (by a suitable feedback from output to the input). When enable is 1, counter starts normal counting operation. When load (''L'') is 1, then the data bits will be loaded with the rising edge of ''CLK'' (synchronous) at the counter bits. As well as 8 counter bits, the carry bit should also be generated so that we can connect two 8 bit counters to form a 16 bit or higher bits of counter cells. The given [[figure|counter_timing_v2.png]] summarizes the digital timing of the 8-bit counter (''D'' and ''COUT'' are not shown).
In order to simplify the design cycle, create first a 1 bit unit cell of this counter [''~PLCNT1'']. Then after cascading 8 of them you will have an 8-bit counter cell [''~PLCNT8'']. However, the final layout should not be placed in a single row. Try to fit the design in 4 rows. In between these rows, reserve an empty space for clock and control signal routings. Finally, the input and output signals should be distributed evenly on the boudary of your design. For example 4 MSB bits can be placed on the top and the 4 on the bottom. Vdd on the left, gnd on the right.
You may refer to any of your text books for the design of ''~PLCNT1'' cell. Once it is designed, the rest of the work will be straight forward. During the design of the circuits you should use the cells designed in the previous labs. You will need a T Flip-flop probably, which may be implemented using the ''~DFF'' and multiplexer circuits. You are encouraged to design the multiplexer circuits using pass-transistors, which will occupy much smaller area (You may ask questions to your assistant about pass-transistor logic if this subject is not covered in the course yet). Do not forget that, you may design the ''~PLCNT1'' circuit using one ''DFF'', one ''~MU4'', and simple combinational logic. Do not search for more complex circuits.
The symbol of the ''~MU4'' and ''~PLCNT1'' can be found in the ''SYMBOL'' library.
''Pad Placement and Routing''
Place 8 ''~PLCNT1'' blocks in 2x4 array (2 columns, and 4 rows). Probably this placement will be close to a square.
We have ''PAD'' cellview in ''SYMBOL'' library. Insert PADs around the array and route the connections.
* Pads are 50u x 50u in dimensions. Note that usually pads are larger than this.
* There should be 50u spacing between pads.
* Although this is not very strict, as a convention, use ''~MET1'' for horizontal connections, and ''~MET2'' as vertical connections (or vice-versa).
''Report''
A short report will be submitted.
* Prove that your ''~PLCNT1'' block works as you want.
* Prove that ''~PLCNT8'' schematics work fine. You do not need to do full simulation of 8-bit. (Do not do full simulation, indeed. It overloads the computers and wastes lots of harddisk space).
o Start the simulation for a while (until 2B for example), then load a larger data and continue counting.
o Do this for a number of data.
o As last, load FE and observe that To works properly.
* Do ''DRC'', extraction, and ''LVS'' as similar to the previous works.
* Include required schematics, layouts, etc.
* Do not do post-layout simulation.
[[This figure|counter.png]] shows a sample 8-bit counter layout.
/***
|Name|CalendarPlugin|
|Source|http://www.TiddlyTools.com/#CalendarPlugin|
|Version|0.0.0|
|Author|SteveRumsby|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|monthly and yearly calendars|
// // updated by Jeremy Sheeley to add cacheing for reminders
// // see http://www.geocities.com/allredfaq/reminderMacros.html
// // ''Changes by ELS 2006.08.23:''
// // added handling for weeknumbers (code supplied by Martin Budden. see "wn**" comment marks)
// // ''Changes by ELS 2005.10.30:''
// // config.macros.calendar.handler()
// // ^^use "tbody" element for IE compatibility^^
// // ^^IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly^^
// // createCalendarDays()
// // ^^use showDate() function (if defined) to render autostyled date with linked popup^^
// // calendar stylesheet definition
// // ^^use .calendar class-specific selectors, add text centering and margin settings^^
!!!!!Configuration:
<<option chkDisplayWeekNumbers>> Display week numbers //(note: Monday will be used as the start of the week)//
|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|
!!!!!Syntax:
|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|
|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|
|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|
|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|
|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|
***/
// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.
//{{{
config.macros.calendar = {};
config.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
config.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];
config.macros.calendar.weekendbg = "#c0c0c0";
config.macros.calendar.monthbg = "#e0e0e0";
config.macros.calendar.holidaybg = "#ffc0c0";
//}}}
// //''Code section:''
// (you should not need to alter anything below here)//
//{{{
if(config.options.txtCalFirstDay == undefined)
config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
config.options.txtCalStartOfWeekend = 5;
if(config.options.chkDisplayWeekNumbers == undefined)//wn**
config.options.chkDisplayWeekNumbers = false;
if(config.options.chkDisplayWeekNumbers)
config.options.txtCalFirstDay = 0;
config.macros.calendar.tiddlerformat = "0DD/0MM/YYYY"; // This used to be changeable - for now, it isn't// <<smiley :-(>>
version.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};
config.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
config.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead
//}}}
// //Is the given date a holiday?
//{{{
function calendarIsHoliday(date)
{
var longHoliday = date.formatString("0DD/0MM/YYYY");
var shortHoliday = date.formatString("0DD/0MM");
for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {
return true;
}
}
return false;
}
//}}}
// //The main entry point - the macro handler.
// //Decide what sort of calendar we are creating (month or year, and which month or year)
// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.
// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//
// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//
// ELS 2006.05.29: add journalDateFmt handling//
//{{{
config.macros.calendar.handler = function(place,macroName,params)
{
var calendar = createTiddlyElement(place, "table", null, "calendar", null);
var tbody = createTiddlyElement(calendar, "tbody", null, null, null);
var today = new Date();
var year = today.getYear();
if (year<1900) year+=1900;
// get format for journal link by reading from SideBarOptions (ELS 5/29/06 - based on suggestion by Martin Budden)
var text = store.getTiddlerText("SideBarOptions");
this.journalDateFmt = "DD-MMM-YYYY";
var re = new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm = re.exec(text);
if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }
if (params[0] == "thismonth")
{
cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, today.getMonth());
}
else if (params[0] == "lastmonth") {
var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else if (params[0] == "nextmonth") {
var month = today.getMonth()+1; if (month>11) { month=0; year++; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else {
if (params[0]) year = params[0];
if(params[1])
{
cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, params[1]-1);
}
else
{
cacheReminders(new Date(year, 0, 1, 0, 0), 366);
createCalendarYear(tbody, year);
}
}
window.reminderCacheForCalendar = null;
}
//}}}
//{{{
//This global variable is used to store reminders that have been cached
//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
if (window.findTiddlersWithReminders == null)
return;
window.reminderCacheForCalendar = {};
var leadtimeHash = [];
leadtimeHash [0] = 0;
leadtimeHash [1] = leadtime;
var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
for(var i = 0; i < t.length; i++) {
//just tag it in the cache, so that when we're drawing days, we can bold this one.
window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"];
}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
var row;
row = createTiddlyElement(calendar, "tr", null, null, null);
var back = createTiddlyElement(row, "td", null, null, null);
var backHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year-1);
};
createTiddlyButton(back, "<", "Previous year", backHandler);
back.align = "center";
var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);
yearHeader.align = "center";
//yearHeader.setAttribute("colSpan", 19);
yearHeader.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?22:19);//wn**
var fwd = createTiddlyElement(row, "td", null, null, null);
var fwdHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year+1);
};
createTiddlyButton(fwd, ">", "Next year", fwdHandler);
fwd.align = "center";
createCalendarMonthRow(calendar, year, 0);
createCalendarMonthRow(calendar, year, 3);
createCalendarMonthRow(calendar, year, 6);
createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDayHeader(row, 3);
createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
var month;
if(nav) {
var back = createTiddlyElement(row, "td", null, null, null);
back.align = "center";
back.style.background = config.macros.calendar.monthbg;
/*
back.setAttribute("colSpan", 2);
var backYearHandler = function() {
var newyear = year-1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
};
createTiddlyButton(back, "<<", "Previous year", backYearHandler);
*/
var backMonHandler = function() {
var newyear = year;
var newmon = mon-1;
if(newmon == -1) { newmon = 11; newyear = newyear-1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
};
createTiddlyButton(back, "<", "Previous month", backMonHandler);
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
// month.setAttribute("colSpan", 3);
// month.setAttribute("colSpan", 5);
month.setAttribute("colSpan", config.options.chkDisplayWeekNumbers?6:5);//wn**
var fwd = createTiddlyElement(row, "td", null, null, null);
fwd.align = "center";
fwd.style.background = config.macros.calendar.monthbg;
// fwd.setAttribute("colSpan", 2);
var fwdMonHandler = function() {
var newyear = year;
var newmon = mon+1;
if(newmon == 12) { newmon = 0; newyear = newyear+1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
};
createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);
/*
var fwdYear = createTiddlyElement(row, "td", null, null, null);
var fwdYearHandler = function() {
var newyear = year+1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
};
createTiddlyButton(fwd, ">>", "Next year", fwdYearHandler);
*/
} else {
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
//month.setAttribute("colSpan", 7);
month.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?8:7);//wn**
}
month.align = "center";
month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
var cell;
for(var i = 0; i < num; i++) {
if (config.options.chkDisplayWeekNumbers) createTiddlyElement(row, "td");//wn**
for(var j = 0; j < 7; j++) {
var d = j + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);
if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
cell.style.background = config.macros.calendar.weekendbg;
}
}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon)
{
var i;
if (config.options.chkDisplayWeekNumbers){
if (first<=max) {
var ww = new Date(year,mon,first);
createTiddlyElement(row, "td", null, null, "w"+ww.getWeek());//wn**
}
else createTiddlyElement(row, "td", null, null, null);//wn**
}
for(i = 0; i < col; i++) {
createTiddlyElement(row, "td", null, null, null);
}
var day = first;
for(i = col; i < 7; i++) {
var d = i + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
var daycell = createTiddlyElement(row, "td", null, null, null);
var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);
if(day > 0 && day <= max) {
var celldate = new Date(year, mon, day);
// ELS 2005.10.30: use <<date>> macro's showDate() function to create popup
if (window.showDate) {
showDate(daycell,celldate,"popup","DD",config.macros.calendar.journalDateFmt,true, isaWeekend); // ELS 5/29/06 - use journalDateFmt
} else {
if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
var title = celldate.formatString(config.macros.calendar.tiddlerformat);
if(calendarIsHoliday(celldate)) {
daycell.style.background = config.macros.calendar.holidaybg;
}
if(window.findTiddlersWithReminders == null) {
var link = createTiddlyLink(daycell, title, false);
link.appendChild(document.createTextNode(day));
} else {
var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
}
}
}
day++;
}
}
//}}}
// //We've clicked on a day in a calendar - create a suitable pop-up of options.
// //The pop-up should contain:
// // * a link to create a new entry for that date
// // * a link to create a new reminder for that date
// // * an <hr>
// // * the list of reminders for that date
//{{{
function onClickCalendarDate(e)
{
var button = this;
var date = button.getAttribute("title");
var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));
date = dat.formatString(config.macros.calendar.tiddlerformat);
var popup = createTiddlerPopup(this);
popup.appendChild(document.createTextNode(date));
var newReminder = function() {
var t = store.getTiddlers(date);
displayTiddler(null, date, 2, null, null, false, false);
if(t) {
document.getElementById("editorBody" + date).value += "\n<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) +
" year:" + (dat.getYear()+1900) + " title: >>";
} else {
document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) +
" year:" + (dat.getYear()+1900) + " title: >>";
}
};
var link = createTiddlyButton(popup, "New reminder", null, newReminder);
popup.appendChild(document.createElement("hr"));
var t = findTiddlersWithReminders(dat, [0,14], null, 1);
for(var i = 0; i < t.length; i++) {
link = createTiddlyLink(popup, t[i].tiddler, false);
link.appendChild(document.createTextNode(t[i].tiddler));
}
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
var max = config.macros.calendar.monthdays[mon];
if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {
max++;
}
return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1 + 7;
var day1 = -first1 + 1;
var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first2 < 0) first2 = first2 + 7;
var day2 = -first2 + 1;
var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first3 < 0) first3 = first3 + 7;
var day3 = -first3 + 1;
var max1 = calendarMaxDays(year, mon);
var max2 = calendarMaxDays(year, mon+1);
var max3 = calendarMaxDays(year, mon+2);
while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1+ 7;
var day1 = -first1 + 1;
var max1 = calendarMaxDays(year, mon);
while(day1 <= max1) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
}
}
//}}}
// //ELS 2005.10.30: added styles
//{{{
setStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");
//}}}
// // override cookie settings for CalendarPlugin:
//{{{
config.options.txtCalFirstDay=0;
config.options.txtCalStartOfWeekend=5;
//}}}
/***
|Name|CollapseTiddlersPlugin|
|Source|http://gensoft.revhost.net/Collapse.html|
|Version|2007.09.12|
|Author|Bradley Meck (modified by ELS)|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|CollapsedTemplate|
|Overrides||
|Description|show/hide content of a tiddler while leaving tiddler title visible|
|ELS 9/12/2007: suspend/resume SinglePageMode (SPM/TPM/BPM) when folding/unfolding tiddlers |
|ELS 6/5/2007: add "return false" at the end of each command handler to prevent IE 'page transition' problem. |
|ELS 3/30/2007: add a shadow definition for CollapsedTemplate. Tweak ViewTemplate shadow so "fold/unfold" and "focus" toolbar items automatically appear when using default templates. Remove error check for "CollapsedTemplate" existence, since shadow version will now always work as a fallback. |
|ELS 2/24/2006: added fallback to "CollapsedTemplate" if "WebCollapsedTemplate" is not found |
|ELS 2/6/2006: added check for 'readOnly' flag to use alternative "WebCollapsedTemplate" |
***/
//{{{
config.shadowTiddlers.CollapsedTemplate=
"<!--{{{-->\
<div class='toolbar' macro='toolbar expandTiddler collapseOthers closeTiddler closeOthers +editTiddler permalink references jump'></div>\
<div class='title' macro='view title'></div>\
<!--}}}-->";
// automatically tweak shadow ViewTemplate to add "collapseTiddler collapseOthers" commands at 'front' of toolbar (before 'closeTiddler')
config.shadowTiddlers.ViewTemplate=config.shadowTiddlers.ViewTemplate.replace(/closeTiddler/,"collapseTiddler collapseOthers closeTiddler");
config.commands.collapseTiddler = {
text: "fold",
tooltip: "Collapse this tiddler",
handler: function(event,src,title) {
var e = story.findContainingTiddler(src);
if(e.getAttribute("template") != config.tiddlerTemplates[DEFAULT_EDIT_TEMPLATE]) {
var t = (readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";
if(e.getAttribute("template") != t ){
e.setAttribute("oldTemplate",e.getAttribute("template"));
// suspend single page mode (or top/bottom of page mode)
var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;
// display tiddler
story.displayTiddler(null,title,t);
// restore SPM/TPM/BPM settings
config.options.chkBottomOfPageMode=saveBPM;
config.options.chkTopOfPageMode=saveTPM;
config.options.chkSinglePageMode=saveSPM;
}
}
return false;
}
}
config.commands.expandTiddler = {
text: "unfold",
tooltip: "Expand this tiddler",
handler: function(event,src,title) {
var e = story.findContainingTiddler(src);
// suspend single page mode (or top/bottom of page mode)
var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;
// display tiddler
story.displayTiddler(null,title,e.getAttribute("oldTemplate"));
// restore SPM/TPM/BPM settings
config.options.chkBottomOfPageMode=saveBPM;
config.options.chkTopOfPageMode=saveTPM;
config.options.chkSinglePageMode=saveSPM;
return false;
}
}
config.macros.collapseAll = {
handler: function(place,macroName,params,wikifier,paramString,tiddler){
createTiddlyButton(place,"Collapse All","",function(){
story.forEachTiddler(function(title,tiddler){
if(story.isDirty(tiddler.title)) return;
var t=(readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";
// suspend single page mode (or top/bottom of page mode)
var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;
// display tiddler
story.displayTiddler(null,title,t);
// restore SPM/TPM/BPM settings
config.options.chkBottomOfPageMode=saveBPM;
config.options.chkTopOfPageMode=saveTPM;
config.options.chkSinglePageMode=saveSPM;
})
})
}
}
config.macros.expandAll = {
handler: function(place,macroName,params,wikifier,paramString,tiddler){
createTiddlyButton(place,"Expand All","",function(){
story.forEachTiddler(function(title,tiddler){
var t=(readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";
// suspend single page mode (or top/bottom of page mode)
var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;
// display tiddler
if(tiddler.getAttribute("template") == t) story.displayTiddler(null,title,tiddler.getAttribute("oldTemplate"));
// restore SPM/TPM/BPM settings
config.options.chkBottomOfPageMode=saveBPM;
config.options.chkTopOfPageMode=saveTPM;
config.options.chkSinglePageMode=saveSPM;
})
})
}
}
config.commands.collapseOthers = {
text: "focus",
tooltip: "Expand this tiddler and collapse all others",
handler: function(event,src,title) {
var e = story.findContainingTiddler(src);
story.forEachTiddler(function(title,tiddler) {
if(story.isDirty(tiddler.title)) return;
var t=(readOnly&&store.tiddlerExists("WebCollapsedTemplate"))?"WebCollapsedTemplate":"CollapsedTemplate";
if (e==tiddler) t=e.getAttribute("oldTemplate");
// suspend single page mode (or top/bottom of page mode)
var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;
var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;
var saveBPM=config.options.chkBottomOfPageMode; config.options.chkBottomOfPageMode=false;
// display tiddler
story.displayTiddler(null,title,t);
// restore SPM/TPM/BPM settings
config.options.chkBottomOfPageMode=saveBPM;
config.options.chkTopOfPageMode=saveTPM;
config.options.chkSinglePageMode=saveSPM;
})
return false;
}
}
//}}}
Yes, it is where you can find me. Enter the room and turn right. My messy table is at the corner, behind the whiteboard.
[[Welcome]]
[[News Summary]]
Here is the list of frequently asked questions.
* What is the report format?
There is no specific report format. Only thing about format is naming your reports. To help me reading and archiving the reports please name your reports as ''<username>_ee413asg<#>.pdf''.
For example akcoren_ee413asg1-2.pdf
* What is the exact due dates of assignments?
If due date is 02.06.2009, than you should send your assignments before 23:59 02.06.2009.
* Do my files stay when I log out?
Yes. Everything under your home folder, including your desktop, stays.
* Is there an easy way to take screenshots?
You can use ''Alt+Print Scrn'' to take a screenshot of the active window. By this way you won't bother with edit, crop etc..
TiddlyWiki uses Wiki style markup, a way of lightly "tagging" plain text so it can be transformed into HTML. Edit this Tiddler to see samples.
! Header Samples
!Header 1
!!Header 2
!!!Header 3
!!!!Header 4
!!!!!Header 5
! Unordered Lists:
* Lists are where it's at
* Just use an asterisk and you're set
** To nest lists just add more asterisks...
***...like this
* The circle makes a great bullet because once you've printed a list you can mark off completed items
* You can also nest mixed list types
## Like this
! Ordered Lists
# Ordered lists are pretty neat too
# If you're handy with HTML and CSS you could customize the [[numbering scheme|http://www.w3schools.com/css/pr_list-style-type.asp]]
## To nest, just add more octothorpes (pound signs)...
### Like this
* You can also
** Mix list types
*** like this
# Pretty neat don't you think?
! Tiddler links
To create a Tiddler link, just use mixed-case WikiWord, or use [[brackets]] for NonWikiWordLinks. This is how the GTD style [[@Action]] lists are created.
Note that existing Tiddlers are in bold and empty Tiddlers are in italics. See CreatingTiddlers for details.
! External Links
You can link to [[external sites|http://google.com]] with brackets. You can also LinkToFolders on your machine or network shares.
! Images
Edit this tiddler to see how it's done.
[img[http://img110.echo.cx/img110/139/gorilla8nw.jpg]]
!Tables
|!th1111111111|!th2222222222|
|>| colspan |
| rowspan |left|
|~| right|
|colored| center |
|caption|c
For a complex table example, see PeriodicTable.
! Horizontal Rules
You can divide a tiddler into
----
sections by typing four dashes on a line by themselves.
! Blockquotes
<<<
This is how you do an extended, wrapped blockquote so you don't have to put angle quotes on every line.
<<<
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1
! Other Formatting
''Bold''
==Strike==
__Underline__
//Italic//
Superscript: 2^^3^^=8
Subscript: a~~ij~~ = -a~~ji~~
@@highlight@@ Unfortunately highlighting is broken right now.
@@color(green):green colored@@
@@bgcolor(#ff0000):color(#ffffff):red colored@@ Hex colors are also broken right now.
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
Type the text for 'InterfaceOptions'
# Laboratory Assignment 1: [[Design of a CMOS inverter|Assignment 1]]
# Laboratory Assignment 2: [[Design of a CMOS inverter and 2-input NAND gate using Standard Cell Design|Assignment 2]]
# Laboratory Assignment 3: [[Design of 2-input NOR, 3-input NAND, and 4-input NAND|Assignment 3]]
# Laboratory Assignment 4: [[An Edge Triggered D Flip - Flop with Asynchronous Reset|Assignment 4]]
# Laboratory Assignment 5: [[An 8-bit syncronous counter with parallel load and asynchronous reset|Assignment 5]]
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/
//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};
config.formatters.push(
{
name: "legacyStrikeByChar",
match: "==",
termRegExp: /(==)/mg,
element: "strike",
handler: config.formatterHelpers.createElementAndWikify
});
} //# end of "install only once"
//}}}
[[Welcome]]
[[News Summary]]
[[Laboratory Works]]
[[Schedule]]
[[Tutorials]]
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<!--}}}-->
<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>EE413 Web site</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
The list of the news (recent first):
[[16 November 2009 - Assignment 1-2 Grades]]
[[14 November 2009 - Design Rule Specification File]]
[[6 November 2009 - Process Specification File]]
[[2 November 2009 - Assignment 1-1 Grades]]
[[26 October 2009 - Priority Hours Updated]]
[[21 October 2009 - Lab User Names & Passwords]]
[[20 October 2009 - First Assignment Intermediate Deadline]]
[[20 October 2009 - Lab Keys & Lab Regulations]]
[[18 October 2009 - Lab Priority Hours]]
[[09 October 2009 - Priority Hours & Cadence Presentation]]
[[23 September 2009 - Welcome]]
<div id='header'>
<div id='titleLine'>
<span id='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span id='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='sidebar'>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div><div id="licensePanel">
<a rel="license" href="http://shared.snapgrid.com/gtd_tiddlywiki.html#RevisionHistory" target="_new">GTDTW Version <span macro="version"></span></a>
<a rel="license" href="http://www.tiddlywiki.com" target="_new">
TiddlyWiki is published by Jeremy Ruston at Osmosoft under a BSD open source license</a>
<a rel="license" href="http://snapgrid.com" target="_new">GTD TiddlyWiki is a modification by Nathan Bowers at Snapgrid under the same license terms.</a>
<a rel="license" href="http://davidco.com" target="_new">"Getting Things Done" is © David Allen at Davidco. Davidco has no affiliation with TiddlyWiki or GTD TiddlyWiki.</a></div></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div class='header' macro='gradient vert #000 #464646'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu' force='true'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
There are three options for the project work. The first two projects will be implemented using Verilog. Please see Verilog tutorial and sample codes in the [[Tutorials]] section whenever you need. The third project is to be implemented similar to your previous assignments; you will do schematic design, layout drawing, DRC, LVS, etc. Details are given in the project definition.
''Project 1: Elevator Controller''
You are expected to design an elevator controller for a building of 8-floors.
• There are 8 floors, and there will be 2 buttons on each floor, one is for going upstairs, and one is for going downstairs.
• There is a system in the cabin to show the number of users in the elevator.
• If the elevator is called from a floor while it is moving:
o If the floor that the elevator is called is on the way of the elevator, and the direction that the new comer is same as the elevator,
o and if there is spare room in the elevator, the elevator will stop on that floor.
• Other than this, it will not stop, and go to that floor when the current task is completed. It means that the system will remember from which floor the elevator is called. For this purpose, you will define a structure similar to a RAM, and the protocol between the controller and the RAM.
• There will be also an emergency button. When this button is pressed, then the elevator will stop on the next available floor; clear all orders and send a signal to administrator. It will not respond to any order until the administrator unlocks the system.
• When the elevator reaches the target floor, the controller will generate a signal showing that the elevator is located on the position.
• You will also control the lamp in the elevator. You are free to construct your own algorithm as long as it is reasonable.
''Project 2: Library Control System''
This project requires that you design a controller for a library. The system will keep which books are borrowed and who borrowed each book. There are also some policies about late return of the books. The rules are summarized below.
• Users will be represented by a 6-bit ID.
• The books will have 8 bit ID numbers.
• Each book can be borrowed for 15 days maximum.
• Each user can have up to 3 books at the same time.
• If a user holds a book after its deadline has passed; he cannot take a new one. The system should also keep how many days the 15 day period is exceeded for that book.
• Any user returning a book later than its due date will be banned from the library for 7 days after returning the book.
• The system will be given an input that indicates the day is changed.
''Note:''
For the first two projects, you can do any reasonable assumptions other than the given specifications. You are advised to consult your assumptions to the assistant before going further. Feel free to ask any questions if any ambiguity is present in the given rules.
''Project 3: Partial Calculator''
In this project you are expected to design a basic partial calculator which will be able to add, subtract, and multiply two numbers with absolute value less than 100.
* The system will take the inputs as two digit BCD numbers. Also the sign of the numbers will be given as input. The output will also be BCD.
* The numbers will have no decimal digit.
* You can do any other reasonable assumptions.
This project will be done schematic based. You will use standard digital gates in ~D_CELLS library. Drawing layout, checking DRC/Extract/LVS will be done similar to the previous laboratory works. Please note that, you will not use the gates you have designed in the previous lab works.
Circuit simulations will be done using ~Verilog-XL (no analog simulation is required). You do not have to make post-layout simulations.
|#|''Laboratory Assignment''|''Due Date''|
|1|[[Design of a CMOS inverter|Assignment 1]]|06.11.2009|
|2|[[Design of a CMOS inverter and 2-input NAND gate using Standard Cell Design|Assignment 2]]|22.11.2009|
|3|[[Design of 2-input NOR, 3-input NAND, and 4-input NAND|Assignment 3]]|11.12.2009|
|4|[[An Edge Triggered D Flip - Flop with Asynchronous Reset|Assignment 4]]|25.12.2009|
|5|[[An 8-bit syncronous counter with parallel load and asynchronous reset|Assignment 5]]|10.01.2010|
/%
|Name|ShowUserName|
|Source|http://www.TiddlyTools.com/#ShowUserName|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|Displays current username, Click for prompt box to change name|
%//%
usage: <<tiddler ShowUserName>>
%/<script label="username">
var who=prompt("Please set your username",config.options.txtUserName);
if (!who||!who.trim().length) return;
config.options.txtUserName=who;
saveOptionCookie("txtUserName");
var tid=story.findContainingTiddler(place);
if (tid) story.refreshTiddler(tid.getAttribute("tiddler"),null,true); // sync containing tiddler
var nodes = document.getElementsByTagName("input");
for(var t=0; t<nodes.length; t++) // sync any input fields that show username
if(nodes[t].getAttribute("option")=="txtUserName") nodes[t].value=who;
</script><script>
place.lastChild.title="click to change your username";
place.lastChild.innerHTML=config.options.txtUserName;
</script>
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
/%<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>%/
~EE413 Introduction to VLSI Design
/***
''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''
|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#SplashScreenPlugin|
|Version|0.21 |
|Requires|~TW2.08+|
!Description:
Provides a simple splash screen that is visible while the TW is loading.
!Installation
Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.
!Customizing
Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.
!History
* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release
!Code
***/
//{{{
window.old_lewcid_splash_restart=window.restart;
window.restart = function()
{ if (document.getElementById("SplashScreen"))
document.getElementById("SplashScreen").style.display = "none";
if (document.getElementById("contentWrapper"))
document.getElementById("contentWrapper").style.display = "block";
window.old_lewcid_splash_restart();
if (splashScreenInstall)
{if(config.options.chkAutoSave)
{saveChanges();}
displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
}
}
var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
{var siteTitle = store.getTiddlerText("SiteTitle");
var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
if (! store.tiddlerExists("MarkupPreHead"))
{var myTiddler = store.createTiddler("MarkupPreHead");}
else
{var myTiddler = store.getTiddler("MarkupPreHead");}
myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
store.setDirty(true);
var splashScreenInstall = true;
}
//}}}
/***
!GTD Style
http://tiddlystyles.com/#theme:GTD
!Generic rules /%==================================================================== %/
***/
/*{{{*/
body {
background: #464646 url('bodygradient.png') repeat-x top fixed;
color: #000;
font: .82em/1.25em "Bitstream Vera Sans", Verdana, Helvetica, Arial, sans-serif;
/*"Lucida Sans Unicode", "Lucida Grande","Trebuchet MS", */
}
/*}}}*/
/***
!Header rules /%====================================================================== %/
***/
/*{{{*/
#contentWrapper
{
margin: 0 auto;
width: 59em;
position: relative;
}
#header
{
color: #fff;
padding: 1.5em 1em .6em 0;
}
#siteTitle {
font-size: 2.3em;
margin: 0;
}
#siteSubtitle {
font-size: 1em;
padding-left: .8em;;
}
#titleLine{
background: transparent;
padding: 0;
}
#titleLine a {
color: #cf6;
}
#titleLine a:hover {
background: transparent;
}
/*}}}*/
/***
!Sidebar rules /%====================================================================== %/
***/
/*{{{*/
#sidebar{
left: 0;
width: 18em;
margin: .9em .9em 0 0;
color: #000;
background: transparent;
}
/*}}}*/
/***
!Main menu rules /%=================================================================== %/
***/
/*{{{*/
#mainMenu{
position: static;
width: auto;
background: #600;
border-right: 3px solid #500;
padding: 0;
text-align: left;
font-size: 1em;
}
#mainMenu h1{
padding: 5px;
margin: 0;
font-size: 1em;
font-weight: bold;
background: transparent;
color: #fff;
}
#mainMenu ul{
padding: 0;
margin: 0;
list-style: none;
}
#mainMenu h1 a,
#mainMenu li a,
#mainMenu li a.button{
display: block;
padding: 0 5px 0 10px;
border: 0;
border-bottom: 1px solid #500;
border-top: 1px solid #900;
margin: 0;
}
#mainMenu a,
#mainMenu a.button{
height: 22px;
height: 1.83em;
line-height: 22px;
color: #fff;
background: #600;
margin-left: 1em;
}
#mainMenu a:hover,
#mainMenu a.button:hover {
background: #600;
color: #ff5;
}
/*}}}*/
/***
!Sidebar options rules /%============================================================ %/
***/
/*{{{*/
#sidebarOptions {
background: #eeb;
border-right: 3px solid #bb8;
color: #B4C675;
padding: .5em 0;
}
#sidebarOptions a {
color: #700;
margin: .2em .8em;
padding: 0;
border: 0;
}
#sidebarOptions a:hover, #sidebarOptions a:active {
color: #fff;
background: #700;
border: 0;
}
#sidebarOptions input{
margin: 2px 10px;
border: 1px inset #333;
padding: 0;
}
#sidebarOptions .sliderPanel {
background: #fff;
color: #000;
padding: 5px 10px;
font-size: .9em;
}
#sidebarOptions .sliderPanel a{
font-weight: normal;
margin: 0;
}
#sidebarOptions .sliderPanel a:link,#sidebarOptions .sliderPanel a:visited {
color: #700;
}
#sidebarOptions .sliderPanel a:hover,#sidebarOptions .sliderPanel a:active {
color: #fff;
background: #700;
}
/*}}}*/
/***
!Sidebar tabs rules /%===================================================================== %/
***/
/*{{{*/
#sidebarTabs {
background: transparent;
border-right: 3px solid #740;
border-bottom: 3px solid #520;
border: 0;
padding: 0;
}
#contentWrapper #sidebarTabs a,
#contentWrapper #displayArea .tabContents a{
color: #fff;
}
#contentWrapper #sidebarTabs a:hover,
#contentWrapper #displayArea .tabContents a:hover {
background: #000;
color: #fff;
}
#contentWrapper #sidebarTabs a:active,
#contentWrapper #displayArea .tabContents a:active{
color: #000;
}
#contentWrapper .tabSelected {
background: #960;
}
#contentWrapper .tabUnselected{
background: #660;
}
#contentWrapper #sidebar .tabset{
background: #eeb;
border-right: 3px solid #bb8;
padding: 0 0 0 .75em;
}
#contentWrapper .tabContents{
font-size: .95em;
background: #960;
border:0;
border-right: 3px solid #740;
border-bottom: 3px solid #520;
padding: .75em;
}
#contentWrapper .tabContents{
width: auto;
}
#contentWrapper #sidebarTabs .tabContents .tabset,
#contentWrapper .tabContents .tabset{
border: 0;
padding: 0;
background: transparent;
}
#contentWrapper .tabContents .tabSelected,
#contentWrapper .tabContents .tabContents {
background: #700;
border: 0;
}
#contentWrapper .tabContents .tabUnselected {
background: #440;
}
#contentWrapper .tabset a {
color: #fff;
padding: .2em .7em;
margin: 0 .17em 0 0;
height: 2em;
position: static;
}
#contentWrapper .tabset a:hover {
background: #000;
color: #fff;
}
#contentWrapper .tabset a:active {
color: #000;
}
#contentWrapper .tabContents ul{
margin: 0;
padding: 0;
list-style: none;
}
#contentWrapper .tabContents .tabContents ul{
color: #eeb;
}
.tabContents ul a,
.tabContents ul .button{
color: #fff;
display: block;
padding: .1em 0 .1em .7em;
background: transparent;
border: 0;
}
.tabContents ul a:hover {
color: #fff;
background: #000;
}
/*}}}*/
/***
!License panel rules /%==================================================================== %/
***/
/*{{{*/
#licensePanel {
padding: 0px 1em;
font-size: .9em;
}
#licensePanel a {
color: #960;
display: block;
margin-top: .9em;
}
#licensePanel a:hover {
color: #fff;
background: transparent;
}
/*}}}*/
/***
!Popup rules /%================================================================= %/
***/
/*{{{*/
.popup {
font-size: .8em;
padding: 0em;
background: #333;
border: 1px solid #000;
}
.popup hr {
margin: 1px 0 0 0;
visibility: hidden;
}
.popup li.disabled {
color: #666;
}
.popup li a,
.popup li a:visited{
color: #000;
border: .1em outset #cf6;
background: #cf6;
}
.popup li a:hover {
border: .1em outset #cf6;
background: #ef9;
color: #000;
}
/*}}}*/
/***
!Message area rules /%================================================================= %/
***/
/*{{{*/
#messageArea{
font-size: .9em;
padding: .4em;
background: #FFE72F;
border-right: .25em solid #da1;
border-bottom: .25em solid #a80;
position: fixed;
top: 10px;
right: 10px;
color: #000;
}
#contentWrapper #messageArea a{
color: #00e;
text-decoration: none;
}
#contentWrapper #messageArea a:hover{
color: #00e;
text-decoration: underline;
background: transparent;
}
#contentWrapper #messageArea .messageToolbar a.button{
border: 1px solid #da1;
}
#contentWrapper #messageArea .messageToolbar a.button:hover{
color: #00e;
text-decoration: none;
border: 1px solid #000;
background: #fff;
}
/*}}}*/
/***
!Tiddler display rules /%================================================================== %/
***/
/*{{{*/
#displayArea {
width: 39.75em;
margin: 0 0 0 17em;
}
.tiddler {
margin: 0 0 .9em 0;
padding: 0 1em;
border-right: .25em solid #aaa;
border-bottom: .25em solid #555;
background: #fff;
}
.title {
font-size: 1.5em;
font-weight: bold;
color: #900;
}
.toolbar {
font-size: .8em;
padding: .5em 0;
}
.toolbar .button{
padding: .1em .3em;
/*color: #000;*/
/*border: .1em outset #cf6;*/
/*background: #cf6;*/
margin: .1em;
}
.toolbar .button:hover {
background: #ef9;
color: #000;
}
.toolbar .button:active {
background: #ff0;
}
/*}}}*/
/***
!Viewer rules /% ------------------------------------------------------------------------------------------ %/
***/
/*{{{*/
.viewer {
line-height: 1.4em;
font-size: 1em;
}
.viewer a:link, .viewer a:visited {
color: #15b;
}
.viewer a:hover {
color: #fff;
background: #000;
}
.viewer .button{
background: transparent;
border-top: 1px solid #eee;
border-left: 1px solid #eee;
border-bottom: 1px solid #000;
border-right: 1px solid #000;
}
.viewer .button:hover{
background: #eee;
color: #000;
}
.viewer .button:active{
background: #ccc;
border-bottom: 1px solid #eee;
border-right: 1px solid #eee;
border-top: 1px solid #111;
border-left: 1px solid #111;
}
.viewer blockquote {
border-left: 3px solid #777;
margin: .3em;
padding: .3em;
}
.viewer pre{
background: #fefefe;
border: 1px solid #f1f1f1;
}
.viewer pre, .viewer code{
color: #000;
}
.viewer ul {
padding-left: 30px;
}
.viewer ol {
padding-left: 30px;
}
ul{
list-style-type: asquare;
}
ol{
list-style-type: decimal;
}
ol ol{
list-style-type: lower-alpha;
}
ol ol ol{
list-style-type: lower-roman;
}
.viewer ul, .viewer ol, .viewer p {
margin: .0;
}
.viewer li {
margin: .2em 0;
}
h1,h2,h3,h4,h5,h6 {
color: #000;
font-weight: bold;
background: #eee;
padding: 2px 10px;
margin: 5px 0;
}
.viewer h1 {font-size: 1.3em;}
.viewer h2 {font-size: 1.2em;}
.viewer h3 {font-size: 1.1em;}
.viewer h4 {font-size: 1em;}
.viewer h5 { font-size: .9em;}
.viewer h6 { font-size: .8em;}
.viewer table {
border: 2px solid #303030;
font-size: 11px;
margin: 10px 0;
}
.viewer th, .viewer thead td{
color: #000;
background: #eee;
border: 1px solid #aaa;
padding: 0 3px;
}
.viewer td {
border: 1px solid #aaa;
padding: 0 3px;
}
.viewer caption {
padding: 3px;
}
.viewer hr {
border: none;
border-top: dotted 1px #777;
height: 1px;
color: #777;
margin: 7px 0;
}
.viewer
{
margin: .5em 0 0 0;
padding: .5em 0;
border-top: 1px solid #ccc;
}
.highlight {
color: #000;
background: #ffe72f;
}
/*}}}*/
/***
!Editor rules /% ----------------------------------------------------------------------------------------- %/
***/
/*{{{*/
.editor {
font-size: .8em;
color: #402C74;
padding: .3em 0;
}
.editor input, .editor textarea {
font: 1.1em/130% "Andale Mono", "Monaco", "Lucida Console", "Courier New", monospace;
margin: 0;
border: 1px inset #333;
padding: 2px 0;
}
.editor textarea {
height: 42em;
width: 100%;
}
input:focus, textarea:focus
{
background: #ffe;
border: 1px solid #000;
}
.footer
{
padding: .5em 0;
margin: .5em 0;
border-top: 1px solid #ddd;
color: #555;
text-align: center;
}
/*}}}*/
/***
!IE Display hacks /% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%/
***/
/*{{{*/
body{
_text-align: center;
}
#contentWrapper
{
/* _width: 770px; CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */
_text-align: left; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */
}
#messageArea{
_position: absolute;
}
/*}}}*/
/***
!Layout Rules /%==============================================%/
***/
/*{{{*/
body {
/* this is required for proper layout on IE, for some reason... */
_position: static;
}
.tagClear {
/* this, too, is a necessary IE hack... */
_margin-top: 10em;
_clear: both;
}
.headerForeground, .headerShadow {
padding-top: 1em;
}
.tiddler {
margin: 0 0 0.9em 0;
padding-bottom: 1em;
}
#mainMenu {
width: 16em;
font-size: 1em;
text-align: left;
padding-top: 0.5em;
}
#mainMenu * {
font-size: 1em;
font-weight: normal;
padding: 0; margin: 0; border: 0;
}
#mainMenu ul {
list-style: none;
margin-bottom: 10px;
}
#mainMenu li {
text-indent: 1em;
}
#mainMenu a.button, #mainMenu a.externalLink {
display: block; margin: 0;
}
#mainMenu a.tiddlyLink {
display: block; margin: 0;
font: 10pt/125% Verdana, "Lucida Grande", "Trebuchet MS", "Bitstream Vera Sans", Verdana, Helvetica, sans-serif;
padding:0.2em 0;
}
#displayArea {
margin-left: 19em; margin-top: 0;
}
.toolbar .button {
margin-left: 4px;
}
/*}}}*/
/***
!Generic Rules /%==============================================%/
***/
/*{{{*/
body {
background: #464646;
color: #000;
}
h1,h2,h3,h4,h5 {
color: #000;
background: #eee;
}
/*}}}*/
/***
!Header /%==================================================%/
***/
/*{{{*/
.header {
background: #000;
}
.headerForeground {
color: #cf6;
}
.headerForeground a {
font-weight: normal;
color: #cf6;
}
/* ??? what is up when you specify a site title colour in IE ??? */
/* .siteTitle { color: red; } */
/*}}}*/
/***
!General tabs /%=================================================%/
***/
/*{{{*/
.tabSelected {
color: #fff;
background: #960;
border: none;
}
.tabUnselected {
color: #fff;
background: #660;
}
.tabContents {
color: #004;
background: #960;
border: none;
}
.tabContents .button, .tabContents a {
border: none;
color: #fff;
}
.tabContents a:hover, .tabset a:hover {
background: #000;
}
/* make nested tab areas look different */
.tabContents .tabSelected, .tabContents .tabContents {
background: #700;
color: #fff;
}
.tabContents .tabContents {
color: #eeb;
}
/*}}}*/
/***
!Main Menu /%=================================================%/
***/
/*{{{*/
#mainMenu {
background: #700;
color: #fff;
border-right: 3px solid #500;
}
#mainMenu * {
color: #fff;
}
#mainMenu a.button, #mainMenu a.tiddlyLink, #mainMenu a.externalLink {
border: none;
border-bottom: 1px solid #500;
border-top: 1px solid #900;
}
#mainMenu a:hover,
#mainMenu a.button:hover {
background-color: #b00;
color: #fff;
}
/*}}}*/
/***
!Sidebar options /%=================================================%/
~TiddlyLinks and buttons are treated identically in the sidebar and slider panel
***/
/*{{{*/
#sidebar {
color: #000;
background: #eeb;
border-right: 3px solid #bb8;
border-bottom: 3px solid #520;
}
#sidebarOptions .sliderPanel {
background: #fff;
}
#sidebarOptions .sliderPanel a {
border: none;
color: #700;
}
#sidebarOptions .sliderPanel a:hover {
color: #fff;
background: #700;
}
#sidebarOptions .sliderPanel a:active {
color: #700;
background: #fff;
}
#sidebarOptions a {
color: #700;
border: none;
}
#sidebarOptions a:hover, #sidebarOptions a:active {
color: #fff;
background: #700;
}
/*}}}*/
/***
!Message Area /%=================================================%/
***/
/*{{{*/
#messageArea {
border-right: 3px solid #da1;
border-bottom: 3px solid #a80;
background: #ffe72f;
color: #014;
}
/*}}}*/
/***
!Popup /%=================================================%/
***/
/*{{{*/
.popup {
background: #cf6;
border: none;
}
.popup hr {
color: #000;
}
.popup li.disabled {
color: #666;
background: #cf6;
}
.popup li a, .popup li a:visited {
color: #000;
border: 1px outset #cf6;
background: #cf6;
}
.popup li a:hover {
color: #000;
border: 1px outset #cf6;
background: #ef9;
}
/*}}}*/
/***
!Tiddler Display /%=================================================%/
***/
/*{{{*/
.tiddler {
background: #fff;
border-right: 3px solid #aaa;
border-bottom: 3px solid #555;
font: 10pt Verdana, "Lucida Grande", "Trebuchet MS", "Bitstream Vera Sans", Verdana, Helvetica, sans-serif;
}
.title {
color: #900;
}
.toolbar {
color: #000;
}
.toolbar .button {
background: #eeb /*#cf6*/;
border: 1px outset #eeb /*#cf6*/;
}
.toolbar .button:hover {
background: #700 /*#ef9*/;
color: #fff;
}
#mainMenu .calendar { border: 1px solid white; }
#mainMenu .calendar, #mainMenu .calendar tr, #mainMenu .calendar td, #mainMenu .calendar a {
}
/*}}}*/
/***
!Additional print overrides for fancy style /%==============================================%/
***/
/*{{{*/
@media print {
.tiddler {
/* get rid of our fancy tiddler outline */
border: none;
}
}
/*}}}*/
/*{{{*/as
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}
h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:[[ColorPalette::TertiaryPale]];
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.tiddler .defaultCommand {font-weight:bold;}
.shadow .title {color:[[ColorPalette::TertiaryDark]];}
.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}
.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::Background]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryDark]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}
.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}
.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
.imageLink, #displayArea .imageLink {background:transparent;}
.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|0.0.0|
|Author|Clint Checketts|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description||
!Usage
<<tagCloud>>
!Code
***/
//{{{
version.extensions.tagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,04)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
config.macros.tagCloud = {
noTags: "No tag cloud created because there are no tags.",
tooltip: "%1 tiddlers tagged with '%0'"
};
config.macros.tagCloud.handler = function(place,macroName,params) {
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);
var tags = store.getTags();
for (var t=0; t<tags.length; t++) {
for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";
}
if(tags.length == 0)
createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
//Findout the maximum number of tags
var mostTags = 0;
for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
if (tags[t][1] > mostTags) mostTags = tags[t][1];
}
//divide the mostTags into 4 segments for the 4 different tagCloud sizes
var tagSegment = mostTags / 4;
for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);
tagCloudWrapper.appendChild(document.createTextNode(" "));
var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
theTag.setAttribute("tag",tags[t][0]);
}
};
setStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");
//}}}
Here are the tutorials:
# [[Combined tutorials|Tutorials_xc06_ubuntu_v3.pdf]] for the 1st laboratory work
# [[Standard Cell Design Concept tutorial|standard_cell.pdf]] for the 2nd laboratory work
# [[Sample Verilog HDL codes|Verilog_sample.pdf]]
# [[Verilog-XL Tutorial|VerilogXL.pdf]]
/***
''Name:'' Weblog
''Version:'' 1.2.0
''Location:'' http://checkettsweb.com/styles/themes.htm#WeblogPlugin
''Author:'' Clint Checketts
''Description:'' Posts the most recently edited tiddlers when the TiddlyWiki is opened, similar to a blog.
''Syntax:'' Change the daysOrPosts and numOfDaysOrPosts variables in the code section.
Examples:
{{{
var daysOrPosts = "days";
var numOfDaysOrPosts = "2";
}}}
will display the defaultTiddlers then all the tiddlers from the 2 most recent days, except those tagged as SystemTiddlers.
{{{
var daysOrPosts = "posts";
var numOfDaysOrPosts = "15";
}}}
will display the defaultTiddlers then the 15 most recent posts, except those tagged as SystemTiddlers.
''Directions:'' Copy this tiddler and tag it as systemConfig. Next, change the daysOrPosts and numOfDaysOrPosts variable to your liking in the 'Settings section'
''Know Issues:'' If a defaultTiddlers references a tiddler that has recently been referenced it will appear in the chronological order rather than at the top of the page. Also, if you are inserting the 15 most recent posts and default tiddlers new enough they too will be part of that count. If there is not text in the default tiddler, the weblog plugin isn't run.
''Revision History:''
v0.1.0 (03 Aug 2005): initial release
v0.1.2 (03 Aug 2005): fixed 'day' sorting order and permalink breakage
v0.1.3 (10 Aug 2005): fixed error for when the numOfDaysOrPosts is greater than number of tiddlers.
v1.1.0 (25 Jan 2005): updated to be compatible with TiddlyWiki 2.0
v1.2.0 (26 Jan 2005): enabled displaying of tiddlers by date created in addition to date modified
!Settings section: (edit these)
***/
//{{{
var daysOrPosts = "posts";
var numOfDaysOrPosts = "10";
var modifiedOrCreate = "modified"
//}}}
/***
!Code section:
***/
//{{{
//modified is the other option
// // We don't want to show tiddlers tagged as systemTiddlers etc. (this doesn't work yet...)
var ignoreTags = ("systemTiddlers","systemConfig","weblogIgnore");
Story.prototype.displayTiddlers_original_TiddlyBlog = Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function(src,titles,state,highlightText,highlightCaseSensitive,animate,slowly) {
// if using the addressbar to select tiddlers return
if(window.location.hash) daysOrPosts = "";
if(daysOrPosts == "posts"){
//lookup the last few posts
var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,modifiedOrCreate);
//Just display all tiddlers if there aren't enough
if(tiddlerNames.length-numOfDaysOrPosts<0) numOfDaysOrPosts = tiddlerNames.length;
for(var t = tiddlerNames.length-numOfDaysOrPosts;t<=tiddlerNames.length-1;t++)
displayTiddler(src,tiddlerNames[t].title,state,highlightText,highlightCaseSensitive,animate,slowly);
}
if (daysOrPosts == "days"){
var lastDay = "";
var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,modifiedOrCreate);
var t = tiddlerNames.length -1;
var tFollower = 0;
for(t;t>=0;t--) if(numOfDaysOrPosts >= 0){
var theDay = tiddlerNames[t].modified.convertToYYYYMMDDHHMM().substr(0,8);
if(theDay != lastDay){
numOfDaysOrPosts = numOfDaysOrPosts -1;
lastDay = theDay;
tFollower = t;
}
}
for(tFollower = tFollower+1; tFollower < tiddlerNames.length;tFollower++){
displayTiddler(src,tiddlerNames[tFollower].title,state,highlightText,highlightCaseSensitive,animate,slowly);
}
}
// call the original displayTiddlers function
this.displayTiddlers_original_TiddlyBlog(src,titles,state,highlightText,highlightCaseSensitive,animate,slowly);
}
//}}}
Welcome to ~EE413 Web Pages. Here is a list of contents:
[[News Summary]]: Follow the news.
[[Laboratory Works]]: See what assignments you have.
[[Schedule]]: Submiting the reports on time is quite important. Please do not miss the due dates.
[[Tutorials]]: All you need to do is to follow the tutorials.
[[FAQ]]: Things you should know.
The assistant of the course is Dinçay Akçören. You can send mail to ''akcoren (at) mems.eee.metu.edu.tr''
/%
MainMenu
SideBarTabs
SideBarOptions
TabTimeline %/